最近在做一個小遊戲開始的時候需要用到倒計時的效果,具體效果爲每秒顯示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,依次類推,就可以實現倒計時動畫啦。