2016-05-23 2 views
4

Si vous avez un Coroutine exécuté dans un script attaché à un objet dans une scène donnée, à la fin de cette scène, le Coroutine est-il terminé/détruit? ... même si la coroutine contient par ex. une boucle While sans fin?Unity: Les Coroutines sont-elles détruites lors du chargement d'une nouvelle scène?


Par exemple, si je le coroutine suivant attaché à un objet dans ma scène:

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

... quand une nouvelle scène est chargée, en supposant qu'aucun script associé à l'objet contient " DontDestroyOnLoad(...) ", la coroutine continuera-t-elle à s'exécuter dans la nouvelle scène chargée?

Raison de la demande: J'ai besoin de savoir si j'ai besoin de garder une liste de tous les Coroutines actifs, afin que je puisse les terminer après chaque changement de scène. Je ne veux pas que la performance se dégrade à mesure que d'autres scènes sont utilisées.

Répondre

5

Réponse courte:

Oui, ils seront mis fin comme la course de Coroutine selon MonoBehaviour ils ont commencé sur. N ° MonoBehaviour == n ° Coroutine.

+0

Donc, juste pour clarifier, ils seront terminés lorsque l'objet sur lequel ils ont été appelés est détruit? –

+2

@BenHayward C'est le MonoBehaviour qui appelle 'StartCoroutine' qui détermine quand il est arrêté. Par exemple. Si MonoBehaviour 'A' appelle' StartCoroutine' en utilisant la méthode 'IEnumerator' de MonoBehaviour' B', alors le coroutine s'arrêtera seulement d'être appelé quand MonoBehviour ** 'A' ** est détruit. –

+1

@BenHayward exactement comme gjttt1 dit. J'ai édité la réponse parce que mon asnwer a commencé par «non» mais devrait avec «oui». –