unity3d DOTween動畫實現數字變化動畫


  在游戲中,經常有這樣的需要數字從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);
    }

    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM