Unity中協程的使用(yield return,IEnumerator)
阿新 • • 發佈:2018-12-29
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()後不會等待協程中的內容返回,會立即執行後續程式碼。