Unity实现动态数字变化

最近的项目需要动态显示数字,所以使用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,//先快后慢
}

2、效果展示

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值