Unity 数字跳字功能
使用场景
游戏中当玩家获得资源,或者战斗力提升的时候。数值直接变化往往不直观。
因此需要更直观的表现,比如增加一些动画效果,数字跳字等。
这里实现一个数字跳字的功能。
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;/// /// 跳字计时/// public float mTimer = 0f;/// /// 跳字间隔/// public float mUpdateDeltaTime = 0.03f;/// /// 跳字时间/// public float mUpdateTime = 0.7f;/// /// 上一次显示数值/// int mLastValue;/// /// 当前显示数值/// int mCurValue = 0;/// /// 目标显示数值/// int mTargetValue = 0;int mOffsetValue{get { return mTargetValue - mLastValue; }}int mRangeParameter;bool useRangeNum = true;// Start is called before the first frame updatevoid 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");}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
