2014-09-04 39 views
0

我想了解c#中協程的語法(因爲它接縫對我來說真的很不尋常......)。Coroutines Unity

當我們這樣做:

yield return new WaitForSeconds(2.0f); 

Firstable:我理解這句話的目的,而不是語法。

WaitForSeconds類代表什麼?它應該是IEnumerator類型的,因爲這是函數的返回類型。但根據文檔http://docs.unity3d.com/ScriptReference/WaitForSeconds-ctor.html,這沒有返回類型,它是一個收益指令(在那裏很困惑)

那麼這個收益的目的是什麼?案件 ?

爲什麼我們將它與return關鍵字混合?

提前致謝。

+2

正在寫一個答案,但基本上它應該結束是這個網站的複製粘貼: http://twistedoakstudios.com/blog/Post83_coroutines-more-than-you-want-to-know 我假設你知道協程是怎麼做的,爲什麼它可以是有用的,否則那個鏈接將毫無用處。 – GameDeveloper 2014-09-04 18:09:26

+0

你應該剛剛添加這個答案;) – ryanscottmurphy 2014-10-30 22:47:23

回答

0

使用yield return調用將創建一個正在返回的類型的IEnumerable。這允許調用函數在計算結束時處理值列表,而不是一次處理所有值,就像剛剛返回集合一樣。

在Unity3d中,這很重要,因爲繪製循環基本上都發生在單個線程上,因此您可以使用協程和yield return語法在腳本內嵌套行爲。

新的WaitForSeconds(...)調用允許執行上下文在一段時間內返回到外部調用者,同時處理空操作有效地暫停該MonoBehaviour的執行,而不暫停整個繪製線程。

0

它只是允許你並行執行一段代碼。

例如:

IEnumerator PrintAfterDelay() 
{ 
    yield return new WaitForSeconds(5.0f); 

    //Rest of the code in this method will execute after 5 seconds while all 
all other code will be execute in parallel 
    Debug.Log("Now I am here after 5 Seconds"); 
} 

調用它的start()爲例。

void Start() 
{ 
    StartCoroutine("PrintAfterDelay"); 
    Debug.Log("I am here"); 
}