最近的项目需要动态显示数字,所以使用Text组件,将数字进行变化操作过程记录下来。
一、UI准备
1、新建一个Text组件
2、新建C#脚本
3、将Text挂载到脚本上
二、函数说明
1、NumberChange 方法
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。
3、ChangeType 方法
在 ChangeType 枚举中定义了三种变化速度的类型:
Linear 表示线性变化,即变化速度保持恒定。
EaseIn 表示先慢后快的变化方式。
EaseOut 表示先快后慢的变化方式
三、项目展示
1、源码展示
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NUMdd : MonoBehaviour
{
/// <summary>
/// 数字变化
/// </summary>
/// <param name="initNum">初始数字</param>
/// <param name="showNum">显示的数字(结果)</param>
/// <param name="targetNum">目标数字</param>
/// <param name="v">Linear:时间 EaseOut:比例值</param>
/// <param name="changeType">变化类型</param>
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;
}
}
}
/// <summary>
/// 数字变化
/// </summary>
public enum ChangeType
{
Linear,//线性
EaseIn,//先慢后快
EaseOut,//先快后慢
}