1. 程式人生 > >Unity3D 數字逐漸增加,一個數字動態變化到另一個數字(使用協程)

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());     }

.