方法一:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class NumberRollerScript : MonoBehaviour
{
public int targetNumber;
private int currentNumber;
public int damage;//固定累加的值
public Text NumberText;//Text文本
public int number;//每次增加的数量
void Start()
{
currentNumber = 0;
number = 2;
targetNumber = 100;
UpdateText();
}
IEnumerator RollNumber()
{
targetNumber += damage;
int increment = Mathf.CeilToInt(number); // 每次增加的数量
while (currentNumber < targetNumber)
{
currentNumber += increment;
if (currentNumber > targetNumber)
{
currentNumber = targetNumber;
}
UpdateText();
yield return new WaitForSeconds(0.05f); // 等待一段时间再继续增加
}
}
void UpdateText()
{
NumberText.text = currentNumber.ToString();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.B))
{
StartRolling();
}
}
public void StartRolling()
{
StartCoroutine(RollNumber());
}
}
挂空物体拉入所需滚动的Text即可。
方法二:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using TMPro;
public class ChangeValue : MonoBehaviour
{
public static ChangeValue instance;
int value = 0;//当前伤害值
public int contentNumber = 0; //固定增加的值
int _InitValue = 0;//起始的值
int upEndValue = 0;//上一次结束的值
int _EndValue = 0;//结束伤害
float _InitTime = 0;//开始时间
float duration = 1;//持续时间
float volleyDamageMutiple = 2.0f;//缩放倍数
bool isChangeTime = false;//是否递增时间
public TMP_Text contentText;//伤害TMP_Text
void Start()
{
contentText = GetComponent<TMP_Text>();
}
// Update is called once per frame
void Update()
{
ScrollNumbers();
}
/// <summary>
/// 滚动数字显示
/// </summary>
void ScrollNumbers()
{
if (Input.GetKeyDown(KeyCode.B))
{
AddScore();
}
//时间递增
if (isChangeTime)
_InitTime += Time.deltaTime;
if (value != _EndValue)
{
value = (int)Mathf.Lerp(_InitValue, _EndValue, _InitTime / duration);
contentText.text = value.ToString();
}
}
public void AddScore()
{
_InitTime = 0;
isChangeTime = true;
_InitValue = value;
upEndValue = _EndValue;
_EndValue = upEndValue + contentNumber;
contentText.transform.DOScale(volleyDamageMutiple, 0.5f);//放大
StartCoroutine(EmplifyIenumerator());
contentText.enabled = true;
}
/// <summary>
/// 播放放大效果
/// </summary>
/// <returns></returns>
private IEnumerator EmplifyIenumerator()
{
yield return new WaitForSeconds(0.3f);
transform.DORewind();
}
}
需要导入DOTween插件配合使用