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
Barbara StreisandOriginal
2025-01-04 04:30:39375Durchsuche

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;
}

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));
}

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!

Stellungnahme:
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