• 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
    {
        /// 
        /// 数字变化
        /// 
        /// 初始数字
        /// 显示的数字(结果)
        /// 目标数字
        /// 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,//先快后慢
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    2、效果展示

    在这里插入图片描述

  • 相关阅读:
    小白备战大厂算法笔试(八)——搜索
    Spring 源码分析(五)——Spring三级缓存的作用分别是什么?
    Ubuntu系统apt添加第三方PPA源
    Python3语法总结-基本数据类型①
    Latice CPLD jed转VME文件简介
    合作式智能运输系统-车用通信系统应用层及应用数据交互标准 第一阶段2020
    【数字实验室】在时序逻辑中使用阻塞赋值会怎么样?
    域名服务:域名迁移
    系统架构设计师职称考试知识结构图及学习笔记总结链接
    LeetCode_1049_最后一块石头的重量Ⅱ
  • 原文地址:https://blog.csdn.net/Prototype___/article/details/138011709