当前位置:网站首页>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");
}
}
}
边栏推荐
猜你喜欢
本地缓存cookie的使用
The whole process of Tinker access --- Compilation
8-byte standard request parsing during USB enumeration
Intelligent risk control China design and fall to the ground
星盟-pwn-babyheap
The third phase of the contributor task is wonderful
Day 76
C语言预处理
swagger错误:WARN i.s.m.p.AbstractSerializableParameter - [getExample,421] - Illegal DefaultValue null
【LeetCode-34】在排序数组中查找元素的第一个和最后一个位置
随机推荐
【LeetCod】三数之和-15
轻松理解进程与线程
stack stack
mk file introduction
Here is a memorial
Day 84
星盟-pwn-babyfmt
【无标题】
Day 85
详解程序执行过程
swagger常用注释API @ApiModel、@ApiModelProperty的用法
Day 72
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
【LeetCode-147】对链表进行插入排序
C语言实现三子棋(代码详解)
JS进阶网页特效(pink老师笔记)
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
手把手导入企业项目(快速完成本地项目配置)
JS this关键字
Certificate of SearchGuard configuration