Der Enumerator der Compiler generiert für Sie iteriert wird. Einmal.
Der Compiler generiert eine Klasse, die IEnumerator implementiert, die über eine MoveNext() - Funktion und eine Current-Eigenschaft verfügt. Die Klasse enthält alle Elemente, die zum Speichern des Funktionszustands zwischen den Aufrufen erforderlich sind. Die genauen Details können als "Compiler Magic" betrachtet werden.
Das Objekt dieser generierten Klasse wird von der Unity3d Engine verwaltet und verwaltet. Die Unity3d-Engine ruft MoveNext() für jede aktive Coroutine einmal pro Frame auf (sofern nicht anders angewiesen).
Dadurch konnte der Unity3d Programmer Skripte schreiben, die Frame für Frame abgespielt werden. Eine Kombination aus C# -Compiler-Magie und Unity3D-Engine-Magie führt zu sehr leistungsstarkem, aber einfach zu verwendendem Scripting.
Um Ihre Frage zu beantworten: der Code in Ihrer Funktion wird einmal ausgeführt, aber es wird bei der "Yield Return" -Anweisung pausieren.
Wie oben erwähnt, wird ein spezielles Objekt, das IEnumerator implementiert, vom C# -Compiler erstellt.
Beim ersten Aufruf von MoveNext() erstellt Ihre Funktion eine Explosion und setzt das aktuelle Objekt auf "new WaitForSeconds (1.5f)".
Die Unity3d-Engine prüft dieses Objekt, erkennt, dass es eine Instanz der speziellen Klasse "WaitForSeconds" ist, setzt den Enumerator in eine Warteschlange und fragt erst nach 1,5 Sekunden nach dem zweiten Element. In der Zwischenzeit werden viele Frames gerendert und die Explosion wird abgespielt.
Nach 1,5 Sek. Wird Unity den Enumerator aus der Warteschlange übernehmen und MoveNext() erneut aufrufen. Der zweite Teil Ihrer Funktion wird jetzt ausgeführt, es wird jedoch kein zweites Objekt generiert. MoveNext() gibt false zurück, um anzuzeigen, dass es kein neues Element erhalten hat. Dies ist das Signal an Unity3d, diesen Enumerator wegzuwerfen. Der Garbage Collector wird den Speicher zu einem bestimmten Zeitpunkt zurückfordern.
Wie gesagt: Viele Compiler und Unity3d Magie geht weiter. Solange Sie sich daran erinnern, dass Ihre Funktion bis zum nächsten Frame bei jeder Rendite-Return-Anweisung gehalten wird, wissen Sie genug, um von diesen speziellen Funktionen zu profitieren.
Der Titel der Frage könnte anschaulicher sein. Irgendwie hat Google die Keywords trotzdem abgeholt. – ftvs