Maison > développement back-end > C++ > Comment puis-je renvoyer une valeur d'une coroutine Unity une fois celle-ci terminée ?

Comment puis-je renvoyer une valeur d'une coroutine Unity une fois celle-ci terminée ?

Mary-Kate Olsen
Libérer: 2025-01-01 11:52:09
original
163 Les gens l'ont consulté

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

Exécution de coroutines et récupération de valeur dans Unity

Dans votre jeu Unity, vous êtes confronté à un dilemme : vous devez renvoyer la valeur d'une variable seulement après qu'une coroutine (WaitForRequest) ait fini de s'exécuter. Cependant, l'instruction return de la méthode POST s'exécute avant la fin de la coroutine, ce qui entraîne une valeur de retour incorrecte.

Comprendre les coroutines

Les coroutines dans Unity sont des fonctions suspendues qui peuvent être interrompu et repris au fil du temps. Ils permettent d'effectuer des opérations asynchrones sans bloquer le thread principal. La coroutine WaitForRequest est responsable de la mise à jour de la variable success_fail en fonction de la réponse HTTP.

Le problème

Le problème découle de l'exécution immédiate de l'instruction return dans le POST méthode. Cela se produit avant que la coroutine n'ait la possibilité de mettre à jour la variable success_fail, ce qui entraîne une valeur de retour prématurée et incorrecte.

Solution utilisant une action

Pour surmonter ce problème, vous peut utiliser un délégué d'action, une fonction sans paramètre qui accepte une variable de type int. En passant l'Action en tant que paramètre à la coroutine WaitForRequest, vous pouvez spécifier une fonction de rappel à appeler une fois la coroutine terminée.

La fonction de rappel fournie par l'Action recevra la valeur mise à jour de success_fail et vous pourrez alors utilisez-le pour effectuer d'autres actions ou renvoyer la valeur si nécessaire.

Exemple Code

Voici une version mise à jour de votre code démontrant l'utilisation d'une Action :

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);
    }
}
Copier après la connexion

Dans ce code, la méthode POST ne renvoie plus directement une valeur. Au lieu de cela, il lance la coroutine WaitForRequest, en passant un délégué Action comme paramètre. L'action sera appelée une fois la coroutine terminée, vous permettant d'accéder et d'utiliser la variable success_fail mise à jour.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal