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、效果展示

在这里插入图片描述

相关推荐

  1. flex动态变化失效

    2024-04-25 00:02:05       32 阅读
  2. C语言实现动态数组

    2024-04-25 00:02:05       60 阅读
  3. Unity动态申请权限

    2024-04-25 00:02:05       90 阅读
  4. Python发送数据Unity实现

    2024-04-25 00:02:05       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 00:02:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 00:02:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 00:02:05       82 阅读
  4. Python语言-面向对象

    2024-04-25 00:02:05       91 阅读

热门阅读

  1. n-gram模型

    2024-04-25 00:02:05       34 阅读
  2. Unity用非常简单的例子解释抽象

    2024-04-25 00:02:05       35 阅读
  3. 如何在 C# 中选择使用抽象类或接口?

    2024-04-25 00:02:05       35 阅读
  4. 【Python】如何在Ubuntu上设置Python脚本开机自启

    2024-04-25 00:02:05       38 阅读
  5. 深入理解汇编:平栈、CALL和RET指令详解

    2024-04-25 00:02:05       36 阅读
  6. 1019 数字黑洞

    2024-04-25 00:02:05       34 阅读
  7. C++:函数符(一)

    2024-04-25 00:02:05       33 阅读
  8. swift语言学习总结

    2024-04-25 00:02:05       26 阅读
  9. Qt 运行 Android 程序时找不到 Toou2D 库闪退

    2024-04-25 00:02:05       28 阅读