Unity倒計時動畫


最近在做一個小遊戲開始的時候需要用到倒計時的效果,具體效果爲每秒顯示3,2,1,GO,然後字體由大到小,透明度由淺到深。下面介紹三種方法。


1.最直接的方法,自己寫倒計時的函數,開協程改變字體大小和透明度,這種方法較爲簡單,下面是我寫的代碼,其中state爲需要改變的Text的text組件

    public void WaitForBegin(int time)
    {
        StartCoroutine(waitForBegin(time));
    }
    IEnumerator waitForBegin(int time)
    {
        float second = 1f;
        Color color=new Color(0, 0, 0, 1);
        while(time>0)
        {
            State.text = time.ToString();
            while (second > 0)
            {
                second -= Time.deltaTime;
                State.fontSize++;
                State.color -= new Color(0, 0, 0, Time.deltaTime);
                yield return new WaitForEndOfFrame();
            }
            second = 1f;
            time--;
            State.color +=color;
            State.fontSize = StateFontSize;
        }
        State.text = "GO";
        while (second > 0)
        {
            second -= Time.deltaTime;
            State.fontSize++;
            State.color -= new Color(0, 0, 0, Time.deltaTime);
            yield return new WaitForEndOfFrame();
        }
        State.fontSize = StateFontSize;
    }


2.使用dotween,dotween是一個Unity插件,主要用於做UI動畫,具體的使用方法可以參考官網的文檔Dotween官方文檔,下面給出使用dotween的代碼。值得注意的是,使用dotween要特別注意函數執行次序,因爲本質上這些函數也是協程,只不過給你封裝好了,如果沒有進行判斷結束,很可能導致意想不到的結果,這點相比於方法1,雖然看起來簡潔一點,但是用起來要花很多心思。

    IEnumerator waitForBegin(int time)
    {
        StateText.text = time.ToString();
        Tween scale = transform.DOScale(5, 1).From();
        Tween fade = StateText.DOFade(0, 1).From();
        while (time > 0)
        {
            if (!fade.IsPlaying())
            {
                time--;
                if (time == 0)
                { 
                    StateText.text = "GO"; 
                }
                else
                { 
                    StateText.text = time.ToString();
                }
                scale = transform.DOScale(5, 1).From();
                fade = StateText.DOFade(0, 1).From();
            }
            yield return new WaitForEndOfFrame();
        }
     }


3.使用動畫,這種方法比較推薦。因爲實際上這種倒計時的動畫不會和場景中的任何對象產生交互,除了動畫結束需要一個通知外,完全與遊戲無關。而且製作起來也很方便。下面介紹這種方法。

首先創建一個用於展示的UI對象,類型爲Text。爲Text添加animation組件,這個animation就是倒計時的動畫。

接下來製作用於播放的animation clip,在window 窗口中找到animation窗口點開如圖



點擊create,創建一個新的clip,選擇保存的路徑和名稱後,點擊add property,如圖


這裏我們需要改變的是字體的透明度,所以點開text,添加color屬性。

接下來就是關鍵步驟了,展開color屬性我們可以看到r g b a,這個就是每一幀屬性值,我們就是通過修改關鍵幀的屬性值,來達到動畫的效果。比如我們想讓字體顏色1秒內由淺到深,也就是rgba中的a值從0變化到1,那麼可以在0幀的時候將a值設置爲0,60幀的時候將a值設置爲1。


可以通過紅圈裏面的值快速定位到關鍵幀



這個時候第一秒的漸變效果就做好了,把這個animation clip拖入text的animation組件的animation中,點擊開始遊戲,可以看一下效果。


其實到這裏基本的思路就講完了。剩下的2和1基本上是一樣的,字體大小的話這裏可以改變rect Transfrm裏面的scale屬性來實現。

最後就是如何改變文字內容,這裏其實需要添加一個事件,可以在60幀的時候改變,也可以在61幀的時候改變,具體看個人喜好。

選擇第60幀,右鍵點擊Add Animation Event,或者點擊左邊的符號添加事件


此時在inspector視圖中會出現一個animation event,選擇function set_text,string填入2就可以實現了。


順便說一下,改變字體大小也可以在這裏設置set_fontSize,具體看個人需求。


下面總結一下動畫的思路,0幀設置內容爲3,透明度爲0,scale爲3,60幀設置透明度爲1,scale爲1;61幀設置內容爲2,透明度爲0,scale爲3,120幀設置透明度爲1,scale爲1,依次類推,就可以實現倒計時動畫啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章