当前位置:网站首页>Unity 数字跳字功能
Unity 数字跳字功能
2022-08-11 05:30:00 【canon_卡农】
使用场景
游戏中当玩家获得资源,或者战斗力提升的时候。数值直接变化往往不直观。
因此需要更直观的表现,比如增加一些动画效果,数字跳字等。
这里实现一个数字跳字的功能。
QQ录屏20220809150915
代码实现:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UpdateJumpText : MonoBehaviour
{
public Text m_JumpText;
public InputField m_inputField;
/// <summary>
/// 跳字计时
/// </summary>
public float mTimer = 0f;
/// <summary>
/// 跳字间隔
/// </summary>
public float mUpdateDeltaTime = 0.03f;
/// <summary>
/// 跳字时间
/// </summary>
public float mUpdateTime = 0.7f;
/// <summary>
/// 上一次显示数值
/// </summary>
int mLastValue;
/// <summary>
/// 当前显示数值
/// </summary>
int mCurValue = 0;
/// <summary>
/// 目标显示数值
/// </summary>
int mTargetValue = 0;
int mOffsetValue
{
get {
return mTargetValue - mLastValue; }
}
int mRangeParameter;
bool useRangeNum = true;
// Start is called before the first frame update
void Start()
{
m_inputField.onEndEdit.AddListener(OnInputFieldEndEdit);
mLastValue = mCurValue = mTargetValue = 0;
m_JumpText.text = mTargetValue.ToString();
}
public void OnInputFieldEndEdit(string input)
{
if (int.TryParse(input, out int inputNum))
{
mTargetValue += inputNum;
TextJump();
}
}
void TextJump()
{
if (mLastValue == mTargetValue)
return;
mTimer = 0;
if (mOffsetValue > 0)
{
if (!IsInvoking("UpdateValue"))
{
InvokeRepeating("UpdateValue", mUpdateDeltaTime, mUpdateDeltaTime);
}
}
else
{
m_JumpText.text = mTargetValue.ToString();
mLastValue = mCurValue = mTargetValue;
if (IsInvoking("UpdateValue"))
{
CancelInvoke("UpdateValue");
}
}
}
void UpdateValue()
{
mTimer += mUpdateDeltaTime;
if (mTimer < mUpdateTime)
{
// 是否使用随机数
if (useRangeNum)
{
mRangeParameter = (int)Mathf.Pow(10, mOffsetValue.ToString().Length);
mCurValue = (mTargetValue / mRangeParameter) * mRangeParameter + Random.Range(mRangeParameter / 10, mRangeParameter);
}
else
{
mCurValue = mLastValue + (int)((mOffsetValue) / mUpdateTime * mTimer);
}
m_JumpText.text = mCurValue.ToString();
}
else
{
m_JumpText.text = mTargetValue.ToString();
mLastValue = mCurValue = mTargetValue;
mTimer = 0f;
CancelInvoke("UpdateValue");
}
}
}
边栏推荐
猜你喜欢
一文看懂注解与反射
Tinker的自我介绍
js学习进阶BOM部分(pink老师笔记)
Open Source Machine Learning Database OpenMLDB Contributor Program Fully Launched
C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB
JS事件循环机制
Day 81
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
C语言-6月10日-my_strcpy函数的编写
随机推荐
【无标题】
JS进阶网页特效(pink老师笔记)
C语言-内存操作函数
Day 84
【LeetCode-205】同构字符串
【LeetCode-49】字母异位词分组
USB URB
The mount command - mounted read-only, solution
JS事件循环机制
Day 71
2022DASCTF X SU 三月春季挑战赛 checkin ROPgadget进阶使用
本地缓存cookie的使用
厂商推送平台-华为接入
js 学习进阶(事件高级 pink老师教学笔记)
Js method commonly used objects and attributes
C语言-7月18日-二维数组的学习
【LeetCode-36】有效的数独
Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB
Day 77
C-8月1日-递归与动态内存管理