Werte von Coroutinen in Unity zurückgeben
Bei der Spieleentwicklung mit Unity werden Coroutinen häufig zum Ausführen asynchroner Aufgaben wie dem Senden von HTTP-Anfragen verwendet . Das Abrufen von Ergebnissen aus einer Coroutine nach Abschluss kann jedoch eine Herausforderung sein.
Bedenken Sie den folgenden Codeausschnitt, in dem eine Coroutine verwendet wird, um eine POST-Anfrage auszuführen und eine Variable zu aktualisieren, success_fail:
public int POST(string username, string passw) { WWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www)); //problem is here ! return success_fail; }
Das Problem besteht darin, dass die Return-Anweisung ausgeführt wird, bevor die Coroutine abgeschlossen ist, was dazu führt, dass ein falscher Wert zurückgegeben wird. Um dies zu beheben, können wir den folgenden Ansatz verwenden:
Aktionen verwenden
Anstatt einen Wert direkt von der Funktion zurückzugeben, können wir eine Aktion
public void POST(string username, string passw, Action<int> callback) { WWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www, callback)); }
In der Coroutine setzen wir die Variable success_fail und rufen den Rückruf mit ihrem Wert auf:
private IEnumerator WaitForRequest(WWW www, Action<int> callback) { yield return www; if (www.error == null) { if(www.text.Contains("user exists")) { success_fail = 2; } else { success_fail=1; } } else { success_fail=0; } callback(success_fail); }
Sie können die POST-Funktion von jedem Skript aus aufrufen und stellen Sie einen Rückruf bereit, um das Ergebnis zu verarbeiten:
this.POST("user1", "password", (result) => { print("Result: " + result); });
Mit diesem Ansatz können Sie den Wert aus der Coroutine abrufen, sobald er abgeschlossen ist, auch wenn Die Funktion ist bereits zurückgekehrt.
Das obige ist der detaillierte Inhalt vonWie kann man Werte von Unity-Coroutinen ordnungsgemäß zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!