2017-02-07 3 views
0

Hier bekommt mein Code, wo ich eine Koroutine zu verwenden Ich versuche:Versuch Koroutinen zu verstehen - nicht erwartete Ausgabe

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class NewBehaviourScript : MonoBehaviour { 

    void Update(){ 
     StartCoroutine (Test()); 
     print ("in update"); 
    } 

    IEnumerator Test() 
    { 
     for(int i=0;i<1000;i++) 
     { 
      print(i); 
      yield return null; 
     } 
    } 
} 

Ich wollte nur den Unterschied zwischen überprüfen, wie die normalen Funktionen im Update-Verhalten gegenüber Koroutinen verwenden. Ich habe gelesen, dass Koroutinen die Werte ihrer lokalen Variablen beibehalten. Aber ich bekomme seltsame Ergebnisse.

See the image for output

+0

Lassen Sie mich wissen, ob meine Antwort Ihr Problem zufriedenstellend gelöst hat - denken Sie auch daran, die [Unity-Dokumentation] (https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html) auf 'StartCoroutine()' zu lesen, da sie geben Sie einige gut erläuterte Beispielverwendungen dort. – Serlite

+0

Hi Shri .. Sie müssen Serlites großzügige Antwort ankreuzen. Die "Dokumentation" Seite für Coroutines ist nicht schlecht http://stackoverflow.com/documentation/unity3d/3415/corutines#t=201702071124331182704 – Fattie

Antwort

4

Sie beginnen eine neue Koroutine jeden Update() Anruf. Daher werden mehr und mehr Instanzen von Test() parallel ausgeführt, und sie befinden sich alle an verschiedenen Stellen in der Iteration. Aus diesem Grund füllt sich Ihr Protokoll bei jedem Frame mit verschiedenen Zahlen (0, 0, 1, 0) 1 2 0 1 2 3 usw.)

Was sollten Sie einmal die Koroutine von Ihrer Start() Methode beginnen, statt Ihre Update() Methode, so es wird nur gestartet werden, zu tun:

void Start(){ 
    StartCoroutine (Test()); 
} 

void Update(){ 
    print ("in update"); 
} 

Hope diesen hilft! Lass es mich wissen, wenn du irgendwelche Fragen hast.

+0

Vielen Dank ... Sie haben es sehr gut @Serlite erklärt –

Verwandte Themen