
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;
}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
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));
}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);
}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);
});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!
Le numéro de page Word commence à partir de la troisième page comme 1 tutoriel
Trois méthodes d'encodage couramment utilisées
Utilisation de la fonction accepter
Quels sont les moteurs de workflow Java ?
Comment lier des données dans une liste déroulante
Que sont les logiciels de programmation en langage C ?
Qu'est-ce que CONNECTION_REFUSED ?
Comment résoudre 400 mauvaises requêtes