Heim > Backend-Entwicklung > C++ > Wie kann ich einen Wert von einer Unity-Coroutine zurückgeben, nachdem sie abgeschlossen ist?

Wie kann ich einen Wert von einer Unity-Coroutine zurückgeben, nachdem sie abgeschlossen ist?

Mary-Kate Olsen
Freigeben: 2025-01-01 11:52:09
Original
164 Leute haben es durchsucht

How Can I Return a Value from a Unity Coroutine After It Completes?

Coroutine-Ausführung und Wertabruf in Unity

In Ihrem Unity-Spiel stehen Sie vor einem Dilemma: Sie müssen den Wert einer Variablen zurückgeben erst nachdem die Ausführung einer Coroutine (WaitForRequest) abgeschlossen ist. Allerdings wird die Return-Anweisung in der POST-Methode ausgeführt, bevor die Coroutine abgeschlossen ist, was zu einem falschen Rückgabewert führt.

Coroutinen verstehen

Coroutinen in Unity sind angehaltene Funktionen, die dies können im Laufe der Zeit pausiert und wieder aufgenommen werden. Sie ermöglichen die Ausführung asynchroner Vorgänge, ohne den Hauptthread zu blockieren. Die Coroutine WaitForRequest ist für die Aktualisierung der Variable success_fail basierend auf der HTTP-Antwort verantwortlich.

Das Problem

Das Problem entsteht durch die sofortige Ausführung der Return-Anweisung im POST Verfahren. Dies geschieht, bevor die Coroutine die Möglichkeit hat, die Variable success_fail zu aktualisieren, was zu einem vorzeitigen und falschen Rückgabewert führt.

Lösung mit einer Aktion

Um dieses Problem zu beheben, müssen Sie kann einen Aktionsdelegaten verwenden, eine parameterlose Funktion, die eine Variable vom Typ int akzeptiert. Indem Sie die Aktion als Parameter an die WaitForRequest-Coroutine übergeben, können Sie eine Rückruffunktion angeben, die aufgerufen wird, wenn die Coroutine abgeschlossen ist.

Die von der Aktion bereitgestellte Rückruffunktion empfängt den aktualisierten Wert von success_fail und Sie können dann Verwenden Sie es, um weitere Aktionen auszuführen oder den Wert nach Bedarf zurückzugeben.

Beispiel Code

Hier ist eine aktualisierte Version Ihres Codes, die die Verwendung einer Aktion demonstriert:

public int POST(string username, string passw)
{
    WWWWWForm form = new WWWForm();
    form.AddField("usr", username);
    form.AddField("pass", passw);

    WWW www = new WWW(url, form);

    StartCoroutine(WaitForRequest(www, (status) =>
    {
        success_fail = status;
        // Perform other actions or return the value as needed
    }));

    // This line is no longer returning a value
    // as the success_fail variable is being modified asynchronously
}

private IEnumerator WaitForRequest(WWW www, Action<int> callback)
{

    yield return www;
    if (www.error == null)
    {

        if (www.text.Contains("user exists"))
        {

            callback(2);
        }
        else
        {
            callback(1);
        }
    }
    else
    {
        callback(0);
    }
}
Nach dem Login kopieren

In diesem Code gibt die POST-Methode keinen Wert mehr direkt zurück. Stattdessen initiiert es die WaitForRequest-Coroutine und übergibt einen Action-Delegaten als Parameter. Die Aktion wird aufgerufen, sobald die Coroutine abgeschlossen ist, sodass Sie auf die aktualisierte Variable success_fail zugreifen und diese verwenden können.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Wert von einer Unity-Coroutine zurückgeben, nachdem sie abgeschlossen ist?. 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