最近的项目需要动态显示数字,所以使用Text组件,将数字进行变化操作过程记录下来。



NumberChange 方法接收四个参数:初始数字 initNum,显示的数字 showNum(即结果),目标数字 targetNum,以及一个表示变化速度的参数 v。此外,还有一个可选参数 changeType,用于指定变化类型,默认为线性变化。
根据 changeType 的值,使用 switch 语句进行不同类型的处理:
如果 changeType 是 Linear,则采用线性变化方式。计算出变化量 (targetNum - initNum) * Time.deltaTime / v,将其累加到 showNum 上。如果 showNum 超过或等于 targetNum,则将其设为 targetNum。最后返回 showNum。
如果 changeType 是 EaseIn,则直接返回 showNum,表示没有变化。
如果 changeType 是 EaseOut,采用先快后慢的变化方式。计算出变化量 (targetNum - showNum) * Time.deltaTime / v,将其累加到 showNum 上,然后返回 showNum。
在 ChangeType 枚举中定义了三种变化速度的类型:
Linear 表示线性变化,即变化速度保持恒定。
EaseIn 表示先慢后快的变化方式。
EaseOut 表示先快后慢的变化方式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NUMdd : MonoBehaviour
{
///
/// 数字变化
///
/// 初始数字
/// 显示的数字(结果)
/// 目标数字
/// Linear:时间 EaseOut:比例值
/// 变化类型
public Text numberText;
public float changeSpeed = 1.0f;
public ChangeType changeType = ChangeType.Linear;
double initNum = 0.0;
double showNum = 0.0;
double targetNum = 100.0;
void Update()
{
// 调用 NumberChange 方法计算数字变化
showNum = NumberChange(initNum, showNum, targetNum, changeSpeed, changeType);
// 更新 UI 显示
numberText.text = showNum.ToString();
}
// NumberChange 方法
public static double NumberChange(double initNum, double showNum, double targetNum, float v, ChangeType changeType = ChangeType.Linear)
{
switch (changeType)
{
case ChangeType.Linear:
showNum += (targetNum - initNum) * Time.deltaTime / v;
if (showNum >= targetNum)
{
showNum = targetNum;
}
return showNum;
case ChangeType.EaseIn:
return showNum;
case ChangeType.EaseOut:
showNum += (targetNum - showNum) * Time.deltaTime / v;
return showNum;
default:
return 0;
}
}
}
///
/// 数字变化
///
public enum ChangeType
{
Linear,//线性
EaseIn,//先慢后快
EaseOut,//先快后慢
}
