using DG.Tweening; using System; using System.Collections; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Assets.Scenes.Ride.Scripts { public class NumberDotween:MonoBehaviour { private Sequence mScoreSequence; private Sequence mProgressSequence; private Text text; private float mOldScore = 0; private float mOldScoreNew = 0; private void Start() { //函数内初始化 mScoreSequence = DOTween.Sequence(); mProgressSequence = DOTween.Sequence(); //函数内设置属性 mScoreSequence.SetAutoKill(false); mProgressSequence.SetAutoKill(false); text = transform.GetComponent(); } private double temp = 0; private int index = -1; private int indexNew = -1; public void AnimateNum(float newScore,double totalDistance,int currentIndex, int digit, string format,Image process) { if (currentIndex != indexNew) { indexNew = currentIndex; process.fillAmount = 1; StartCoroutine(CompleteFill(process)); } else { mProgressSequence.Append(DOTween.To(delegate (float value) { process.fillAmount = (float)(value / totalDistance); }, mOldScoreNew, newScore, 1f)); //将更新后的值记录下来, 用于下一次滚动动画 mOldScoreNew = newScore; } } public void AnimateNumText(float newScore, double totalDistance, int currentIndex, int digit, string format, Image process) { if (currentIndex != index) { text.text = string.Format(format, totalDistance); index = currentIndex; mOldScore = (float)totalDistance; } else { mScoreSequence.Append(DOTween.To(delegate (float value) { //if (value != newScore) { temp = Math.Round(value, digit); //向Text组件赋值 text.text = string.Format(format, temp); } }, mOldScore, newScore, 1f)); //将更新后的值记录下来, 用于下一次滚动动画 mOldScore = newScore; } } IEnumerator CompleteFill(Image process) { yield return new WaitForSeconds(0.3f); mOldScoreNew = 0; process.fillAmount = 0; } } }