Valeur renvoyée uniquement après la fin de la coroutine dans Unity
Lorsque vous travaillez avec des coroutines dans Unity, il est courant de rencontrer le besoin de mettre à jour une variable et renvoie sa valeur une fois la coroutine terminée. Cependant, les fonctions n'attendent pas intrinsèquement la fin des coroutines avant de revenir.
Pour résoudre ce problème, une approche consiste à utiliser un délégué Action. Un délégué d'action est une fonction qui prend une valeur d'entrée et exécute une action sur celle-ci. Dans ce cas, le délégué Action peut être utilisé comme rappel pour recevoir la valeur mise à jour une fois la coroutine terminée.
Code mis à jour :
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); // Start the coroutine and pass in the callback StartCoroutine(WaitForRequest(www, (status) => { success_fail = status; })); // Function does not wait for coroutine to finish, so return a placeholder value return -1; } 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); } }
Dans le POST, au lieu de renvoyer la valeur directement, nous démarrons la coroutine et transmettons le délégué Action comme rappel. Le rappel sera exécuté une fois la coroutine terminée et définira la variable success_fail avec la valeur appropriée.
Bien que cette solution évite le problème du retour d'une fausse valeur, il est important de noter que la méthode POST renvoie toujours une valeur d'espace réservé (-1) pour éviter de bloquer l'exécution de la fonction. C'est au client de la méthode POST de vérifier cette valeur d'espace réservé et de la gérer de manière appropriée.
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!