在游戲中,經常有這樣的需要數字從1逐步增加到一個值N,而動畫由1到這個值N的變化過程中,每變化一次,都是有動畫,但是往往這個動畫還沒結束,下個動畫就來了。想解決這個問題,可以使用下面這個思路。
即這個動畫沒播完之前,下個動畫不能播,播完一個動畫后,再進行下一個。下面請看代碼。
using UnityEngine; using System.Collections; using UnityEngine.UI; using DG.Tweening; public class InGameFlowerItem : MonoBehaviour { public uint m_ID; public string m_SenderName = ""; public int m_Num = 0;//已經送花的數量 public Text m_NameText; public Text m_NumText; public float m_RemoveTime = 5f; Tweener m_Tweener; private int m_tweenNum = 0; private bool flag = false; public void Show() { gameObject.SetActive(true); m_NameText.text = m_SenderName; if (m_Num <= 5) { m_NumText.text = m_Num.ToString(); } this.Invoke("RemoveSelf", m_RemoveTime); } public void AddNum() { this.CancelInvoke("RemoveSelf"); this.Invoke("RemoveSelf", m_RemoveTime); if (m_Num > 5) //處理文字動畫 { m_tweenNum++; } else { m_Num++; } } void DoTween() { if (m_tweenNum <= 0) { flag = false; return; } if (m_Tweener != null && m_Tweener.IsPlaying()) { return; } m_Tweener = m_NumText.transform.DOScale(3f, 0.25f).SetEase(Ease.InBack).OnComplete(() => { m_NumText.text = (++m_Num).ToString(); m_NumText.transform.DOScale(1f, 0.25f).OnComplete(() => { m_tweenNum--; DoTween(); }); }); } // Update is called once per frame void Update() { if (m_tweenNum > 0 && !flag) { flag = true; DoTween(); } } void OnDisable() { m_Tweener.Kill(); } public void InitData(uint id,string senderName ,int num) { m_ID = id; m_SenderName = senderName; m_Num = num; } public void RemoveSelf() { InGameFlowerPanel.Inst.ClearFlowerItem(m_ID); this.CancelInvoke("RemoveSelf"); Destroy(gameObject); } }