Unity3D 數字逐漸增加,一個數字動態變化到另一個數字(使用協程)
目錄
首先實現上述功能,需要使用“協程”這個功能。
協程
協程:控制程式碼等到特定的時機後再執行後續步驟.
先看Unity3D的函式執行順序圖
以上協程函式定義:(yield 開頭的便是)
yield null:協程將在下一幀所有指令碼的Update執行之後,再繼續執行. yield WaitForSeconds:協程在延遲指定時間,且當前幀所有指令碼的 Update全都執行結束後才繼續執行. yield WaitForFixedUpdate:協程在所有指令碼的FixedUpdate執行之後,再繼續執行. yield WWW:協程在WWW下載資源完成後,再繼續執行. yield StartCoroutine:協程在指定協程執行結束後,再繼續執行. WaitForSecondsRealtime:與WaitForSeconds類似,但不受時間縮放影響. WaitWhile:當返回條件為假時才執行後續步驟.
使用方法:
void Start () { StartCoroutine(A()); }
IEnumerator A() //加粗的必須要寫,函式名自己定義 { //yield return new WaitForSeconds(0.1f); //這裡可以用上述的函式 StopCoroutine(A()); }
PS:注意如果需要停停止其中某個協程,可使用StopCoroutine。但在使用時,你需要注意一點,停止協程的方式要與開啟協程的方式一致。StopCoroutine(“A”)必須與StartCoroutine(“A”)成對使用,與StartCoroutine(A())一起使用則完全無效。
逐漸增加的實現
程式碼如下:
int max; //最終值
int min; //初始值 int result = 0; public int change_speed = 5; //速度 // Use this for initialization void Start () { StartCoroutine(Change()); } IEnumerator Change() { int delta = (max - min) / change_speed; //delta為一個常數,每次加的數大小
result = min;
for(int i = 0;i<change_speed;i++) { result += delta; this.GetComponent<Text>().text = result.ToString(); yield return new WaitForSeconds(0.1f); //每 0.1s 加一次 } result = max; this.GetComponent<Text>().text = max.ToString(); StopCoroutine(Change()); }
.