2016-05-23 91 views
4

如果您在連接到給定場景中的對象的腳本中運行協程,那麼當該場景結束時,協程會被終止/銷燬?即使協程包含例如一個無盡的循環?統一:加載新場景時正在運行協程?


舉例來說,如果我有附加到一個對象在我的場景以下協程:

IEnumerator SampleCoroutine() 
{ 
    while (true) { 
     yield return new WaitForSeconds(1.0f); 
    } 
    yield return null; 
} 

...當一個新的場景被載入,假設沒有附加到對象的腳本包含「 DontDestroyOnLoad(...)「,協程會在新加載的場景中執行嗎?

問題的理由:我需要知道是否需要保留所有活動協同程序的列表,以便在每次場景更改後都可以結束它們。隨着使用更多的場景,我不希望性能降低。

回答

5

簡短的回答:

是的,他們會爲Coroutine小號取決於MonoBehaviour運行,他們開始終止。否MonoBehaviour ==否Coroutine

+0

只是爲了澄清,當它們被調用的對象被銷燬時它們將被終止? –

+2

@BenHayward調用'StartCoroutine'確定何時停止的MonoBehaviour。例如。如果MonoBehaviour'A'使用MonoBehaviour'B'的'IEnumerator'方法調用'StartCoroutine',那麼只有當MonoBehviour **'A' **被破壞時,協程纔會停止被調用。 –

+1

@ BenHayward完全像gjttt1說的。我編輯了答案,導致我的「不」開始,但應該與「是」開始。 –