1. 程式人生 > >Unity中協程的使用(yield return,IEnumerator)

Unity中協程的使用(yield return,IEnumerator)

yield return的介紹:

yield return null; // 下一幀再執行後續程式碼
yield return 0; //下一幀再執行後續程式碼
yield return 6;//(任意數字) 下一幀再執行後續程式碼
yield break; //直接結束該協程的後續操作
yield return asyncOperation;//等非同步操作結束後再執行後續程式碼
yield return StartCoroution(/*某個協程*/);//等待某個協程執行完畢後再執行後續程式碼
yield return WWW();//等待WWW操作完成後再執行後續程式碼
yield return new WaitForEndOfFrame();//等待幀結束,等待直到所有的攝像機和GUI被渲染完成後,在該幀顯示在螢幕之前執行
yield return new WaitForSeconds(0.3f);//等待0.3秒,一段指定的時間延遲之後繼續執行,在所有的Update函式完成呼叫的那一幀之後(這裡的時間會受到Time.timeScale的影響);
yield return new WaitForSecondsRealtime(0.3f);//等待0.3秒,一段指定的時間延遲之後繼續執行,在所有的Update函式完成呼叫的那一幀之後(這裡的時間不受到Time.timeScale的影響);
yield return WaitForFixedUpdate();//等待下一次FixedUpdate開始時再執行後續程式碼
yield return new WaitUntil()//將協同執行直到 當輸入的引數(或者委託)為true的時候....如:yield return new WaitUntil(() => frame >= 10);
yield return new WaitWhile()//將協同執行直到 當輸入的引數(或者委託)為false的時候.... 如:yield return new WaitWhile(() => frame < 10);

 

呼叫協程的方法:

第一種:StartCoroutine(方法)  

可以呼叫多個引數的方法,只能通過StopAllCoroutines來結束。

第二種:StartCoroutine(“方法名”)

只能呼叫不含引數或只包含一個引數的協程方法,StopCoroutine(“方法名”)來結束協程。

總結:

當某一個指令碼中的協程在執行過程中,如果我們將該指令碼的enable設定為false,協程不會停止。只有將掛載該指令碼的物體設定為SetActive(false)時才會停止。

Unity在呼叫StartCoroutine()後不會等待協程中的內容返回,會立即執行後續程式碼。