Heim > Backend-Entwicklung > C++ > Wie kann man Werte von Unity-Coroutinen ordnungsgemäß zurückgeben?

Wie kann man Werte von Unity-Coroutinen ordnungsgemäß zurückgeben?

Barbara Streisand
Freigeben: 2025-01-04 04:30:39
Original
373 Leute haben es durchsucht

How to Properly Return Values from Unity Coroutines?

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;
}
Nach dem Login kopieren

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 verwenden. Parameter, um einen Rückruf bereitzustellen, der aufgerufen wird, sobald die Coroutine abgeschlossen ist. Hier ist der geänderte Code:

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));
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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);
});
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage