Unity Engine
C#
Programming
MonoBehaviour
內的StartCoroutine
進行呼叫MonoBehaviour
的生命週期息息相關從上圖可以得知幾種等待方式,並有著呼叫順序,這件事告訴我們,一個MonoBehaviour
的循環或幀書內可能進行著N次對Coroutine
的回傳與呼叫
最常使用的方式
yield break
之後的程式不會被執行WaitForFixedUpdate
、WaitForEndFrame
、WaitForSeconds
,這些都是等待固定時間或是幀數,若要進行資源載入或是操作硬體I/O,無法預期要多少時間的話,請使用AsyncOperation衍生類別:
待補,此段文字來自Reference 2
Start() 執行過程中所啟動的兩個 Coroutine ,實際上都要等到第二幀之後才會真正開始運行。這雖然看起來似乎是個不太重要的現象,但當我們提到 await/async 或是多執行緒時,在哪裡執行就會成為大部分工作都要在主執行緒執行的 Unity 很需要考量的地方。
透過讓 yield 回傳 Coroutine 類別物件,Coroutine 就可以去等待另一個 Coroutine 完成,但是這兩個 Coroutine 之間的關係到底是什麼?是互相隸屬還是個別獨立運作?如果我們將其中一個 Coroutine 用 StopCoroutine() 強制中止時,另外一個會出現什麼反應?是否會發生什麼問題?Unity 在 5.3 之後加入了 CustomYieldInstruction 又會改變些什麼?我們為什麼不建議再讓 yield 用回傳 Coroutine 的方式來等待了?這種種的問題,我們很快回來!
Unity Coroutine 使用筆記
Coroutine 在等什麼?了解 Unity 的 YieldInstruction 和 Coroutine 類別