Maison > développement back-end > C++ > Comment renvoyer correctement les valeurs des coroutines Unity ?

Comment renvoyer correctement les valeurs des coroutines Unity ?

Barbara Streisand
Libérer: 2025-01-04 04:30:39
original
381 Les gens l'ont consulté

How to Properly Return Values from Unity Coroutines?

Valeurs de retour des coroutines dans Unity

Dans le développement de jeux utilisant Unity, les coroutines sont couramment utilisées pour effectuer des tâches asynchrones, telles que l'envoi de requêtes HTTP . Cependant, récupérer les résultats d'une coroutine une fois celle-ci terminée peut s'avérer difficile.

Considérez l'extrait de code suivant, dans lequel une coroutine est utilisée pour exécuter une requête POST et mettre à jour une variable, 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;
}
Copier après la connexion

Le problème ici est que l'instruction return s'exécute avant la fin de la coroutine, ce qui entraîne le retour d'une valeur incorrecte. Pour résoudre ce problème, nous pouvons utiliser l'approche suivante :

Utiliser des actions

Au lieu de renvoyer une valeur directement à partir de la fonction, nous pouvons utiliser une action paramètre pour fournir un rappel qui sera invoqué une fois la coroutine terminée. Voici le code modifié :

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

Dans la coroutine, nous définissons la variable success_fail et invoquons le rappel avec sa valeur :

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

Vous pouvez appeler la fonction POST depuis n'importe quel script et fournissez un rappel pour gérer le résultat :

this.POST("user1", "password", (result) => {
    print("Result: " + result);
});
Copier après la connexion

Cette approche vous permet de récupérer la valeur de la coroutine une fois celle-ci terminée, même si la fonction est déjà revenue.

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