Coroutines Unity : renvoyer des valeurs une fois terminées
Dans Unity, les coroutines sont couramment utilisées pour les tâches asynchrones. Cependant, ils posent des problèmes lorsqu'ils tentent de renvoyer des valeurs une fois terminés. Considérez le scénario suivant :
Problème : Un script lance une requête POST à l'aide d'une coroutine, mais nécessite le retour d'une valeur lorsque la requête est terminée. Cependant, l'instruction "return" s'exécute avant la fin de la coroutine, ce qui entraîne des valeurs incorrectes.
Solution : rappel via le délégué d'action
1. Créer un délégué à l'action :
public delegate void RequestStatusCallback(int status);
2. Lancez la requête avec un rappel :
Dans la méthode Start() ou Update() du script, lancez la coroutine et fournissez le rappel :
WWW www = new WWW("http://google.com"); StartCoroutine(WaitForRequest(www, (status) => { print(status.ToString()); }));
3. Implémentez la coroutine WaitForSeconds :
private IEnumerator WaitForRequest(WWW www, RequestStatusCallback callback) { int tempInt = 0; yield return www; if (string.IsNullOrEmpty(www.error)) { if(!string.IsNullOrEmpty(www.text)) { tempInt = 3; } else { tempInt=2; } } else { print(www.error); tempInt=1; } callback(tempInt); }
4. Utilisez le rappel pour mettre à jour les valeurs :
Le rappel donne accès à la valeur d'état, vous permettant de mettre à jour les variables ou d'effectuer d'autres actions ultérieures en fonction du résultat de la demande.
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!