In Unity haben wir einige spezielle Dinge für Coroutinen, die zusätzlich zu normalem C # existieren.
Zum Beispiel können wir verwenden
yield return WaitForSeconds(5.f);
Warten Sie 5 Sekunden, bevor Sie fortfahren.
Was machen yield return false;
und yield return true;
tun?
yield return true
das was besonderes macht. Aberyield return null
pausiert einfach für einen Frame, also vermute ich, dassyield return false
das genau den gleichen Effekt hat (auchyield return 0
da 0 falsch null sind alle gleich unter der Haube)if (0)
oderif (null)
, anders als in C und C ++.yield return 0
funktioniert. anscheinend aus dem Grund MLM erklärtyield
Schlüsselwort gibt es seit mindestens C # 2.0. Alles, was Unity tut, ist, es als Coroutine zu bezeichnen und den generierten Iterator und die von ihm zurückgegebenen Werte so zu behandeln, dass Sie nicht blockierende Verzögerungen bei der Ausführung Ihres Codes verursachen können.WaitForSeconds
es nicht deklariert ist. Sobald Sie eine aufgerufene Methode deklarierenWaitForSeconds
, die ein float-Argument akzeptiert und den Elementtyp der von Ihnen implementierten Enumeration zurückgibt, wird sie erneut kompiliert. Daheryield
ist die Einheit nichts Besonderes. Wenn überhaupt, ist dieWaitForSeconds
Methode eine Besonderheit von Unity, aber selbst dann erweitert sie nicht die Sprache C #, sondern ist einfach eine zusätzliche Methode, die mit Standard-C # geschrieben wurde.Antworten:
Die
WaitForEndOfFrame
und andere der gleichen sind nur leere Funktionen, die das markieren,YieldInstruction
um zu entscheiden, was in der Maschine zu tun ist.Der Standardfall scheint zu sein
WaitForEndOfFrame
. Also, wenn Sieyield return
etwas, das keine besondere Bedeutung hat, wie ein Bool, ist es das gleiche wieWaitForEndOfFrame
.Es scheint keine offizielle Dokumentation zu diesem Verhalten zu geben.
Aktualisieren
Rutter kommentierte einen weiteren Sonderfall:
yield return null
Alle Unity Coroutines, einschließlich
yield return null
, werden ausgeführt, bevor der Frame gerendert wird , mit Ausnahme vonWaitForEndOfFrame
. Sie können finden rutter ‚s super Antwort über bei Unity Antworten erklären , diese weiter (schöne Diagramme enthalten).quelle
null
und gleichWaitForEndOfFrame
sind, aber sie unterscheiden sich geringfügig , wie auf der Handbuchseite zur Ausführungsreihenfolge beschrieben .