Unity-Coroutinen: Werte nach Abschluss zurückgeben
In Unity werden Coroutinen häufig für asynchrone Aufgaben verwendet. Sie stellen jedoch eine Herausforderung dar, wenn versucht wird, nach Abschluss Werte zurückzugeben. Stellen Sie sich das folgende Szenario vor:
Problem: Ein Skript initiiert eine POST-Anfrage mithilfe einer Coroutine, erfordert jedoch die Rückgabe eines Werts, wenn die Anfrage abgeschlossen ist. Allerdings wird die „return“-Anweisung ausgeführt, bevor die Coroutine beendet ist, was zu falschen Werten führt.
Lösung: Rückruf über Action Delegate
1. Erstellen Sie einen Aktionsdelegierten:
public delegate void RequestStatusCallback(int status);
2. Initiieren Sie die Anfrage mit einem Rückruf:
Initiieren Sie in der Start()- oder Update()-Methode des Skripts die Coroutine und stellen Sie den Rückruf bereit:
WWW www = new WWW("http://google.com"); StartCoroutine(WaitForRequest(www, (status) => { print(status.ToString()); }));
3. Implementieren Sie die WaitForSeconds-Coroutine:
private IEnumerator WaitForRequest(WWW www, RequestStatusCallback callback) { int tempInt = 0; yield return www; if (string.IsNullOrEmpty(www.error)) { if(!string.IsNullOrEmpty(www.text)) { tempInt = 3; } else { tempInt=2; } } else { print(www.error); tempInt=1; } callback(tempInt); }
4. Verwenden Sie den Rückruf, um Werte zu aktualisieren:
Der Rückruf bietet Zugriff auf den Statuswert, sodass Sie Variablen aktualisieren oder andere nachfolgende Aktionen basierend auf dem Ergebnis der Anfrage ausführen können.
Das obige ist der detaillierte Inhalt vonWie kann ich Werte von Unity-Coroutinen zurückgeben, nachdem sie abgeschlossen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!