Dans Unity, nous avons des choses spéciales pour les coroutines qui s'ajoutent au C # normal.
par exemple, nous pouvons utiliser
yield return WaitForSeconds(5.f);
faire attendre une coroutine 5 secondes avant de continuer.
Que faire yield return false;
et yield return true;
faire?
yield return true
fait quelque chose de spécial. Maisyield return null
s'arrête simplement pour un cadre, donc je soupçonne que celayield return false
a exactement le même effet (égalementyield return 0
depuis 0 faux nul sont tous les mêmes sous le capot)if (0)
ouif (null)
, contrairement à C et C ++.yield return 0
fonctionne; apparemment à cause de la raison expliquée par MLMyield
mot-clé existe depuis au moins C # 2.0. Unity ne fait que l'appeler coroutine et gère l'itérateur généré et les valeurs qui en sont retournées de manière à ce que vous puissiez provoquer des retards non bloquants dans l'exécution de votre code.WaitForSeconds
n'est pas déclaré. Dès que vous déclarez une méthode appeléeWaitForSeconds
qui prend un argument float et qui renvoie le type d'élément de l'énumération que vous implémentez, elle se compile à nouveau. Par conséquent,yield
n'est pas spécial pour l'unité. Si quoi que ce soit, laWaitForSeconds
méthode est spéciale à Unity, mais même dans ce cas, elle n'étend pas le langage C #, mais est simplement une méthode supplémentaire qui a été écrite en utilisant le C # standard.Réponses:
le
WaitForEndOfFrame
et d'autres similaires ne sont que des fonctions vierges qui marquent leYieldInstruction
afin de décider quoi faire dans le moteur.Le cas par défaut semble être
WaitForEndOfFrame
. Donc si vousyield return
quelque chose qui n'a pas de signification particulière, comme un bool, c'est la même chose queWaitForEndOfFrame
.Il ne semble pas y avoir de documentation officielle sur ce comportement.
Mise à jour
rutter commenté un autre cas spécial:
yield return null
Toutes les coroutines Unity, y compris
yield return null
, s'exécutent avant le rendu du cadre, à l'exception deWaitForEndOfFrame
. Vous pouvez trouver la réponse impressionnante de rutter sur Unity Answers expliquant cela plus en détail (beaux diagrammes inclus).la source
null
etWaitForEndOfFrame
sont les mêmes, mais ils sont en fait légèrement différentes , comme indiqué à l' ordre d'exécution page de manuel.