Quelle est la différence entre les méthodes Update
et FixedUpdate
, et quand utiliser ces méthodes?
De la forum :
La mise à jour s'exécute une fois par image. FixedUpdate peut être exécuté une fois, zéro ou plusieurs fois par image, en fonction du nombre d'images physiques par seconde définies dans les paramètres de l'heure et de la vitesse/ralentissement de la vitesse d'affichage.
Reportez-vous également à la réponse donnée par canard dans le même forum pour une explication détaillée de la différence entre les deux.
C'est pour cette raison que FixedUpdate doit être utilisé lors de l'application de forces, de couples ou d'autres fonctions liées à la physique, car vous savez qu'il sera exécuté exactement en synchronisation avec le moteur physique lui-même.
Alors que Update () peut varier en décalage par rapport au moteur physique, plus rapidement ou plus lentement, en fonction de la charge que les graphiques mettent sur le moteur de rendu à un moment donné, ce qui - s’il est utilisé en physique - donnerait une variante correspondante effets physiques!
FixedUpdate est utilisé pour être en phase avec le moteur physique. Par conséquent, tout ce qui doit être appliqué à un corps rigide doit se produire dans FixedUpdate. Update , en revanche, fonctionne indépendamment du moteur physique. Cela peut être bénéfique si le framerate d'un utilisateur devait chuter, mais vous avez besoin d'un certain calcul pour continuer à s'exécuter, comme si vous mettiez à jour un client de discussion ou un client Voip, vous voudriez une ancienne mise à jour régulière.
Unity a une vidéo de Nice sur Update vs FixedUpdate ici: nity - Update vs. FixedUpdate
Le site est une excellente ressource pour les programmeurs de jeux débutants.
En ajoutant aux autres réponses, Update correspond à la cadence d'images, pas à la cadence de calcul physique. Cela signifie que, généralement, lorsque quelque chose change de visuel, vous voulez que ce soit fait dans Update, pas FixedUpdate. Cela garantit que c'est toujours dans le temps pour le moment même où le cadre est rendu. J'ai rencontré un certain nombre de cas dans lesquels j'avais un mouvement qui ne paraissait pas fluide parce que je l'avais calculé dans FixedUpdate.
Le seul coût potentiel de la mise à jour dans Fixe doit être effectué dans FixedUpdate, c’est que votre fidélité physique pourrait baisser, en particulier si vous atteignez des taux de trame faibles (mais en général, il s’agit d’un problème distinct qui doit être corrigé. une bonne raison de mettre quelque chose dans FixedUpdate au lieu de Update).
Si vous cherchez à contrôler l'ordre dans lequel différents scripts effectuent leurs mises à jour, FixedUpdate est l'arborescence à éviter. vous devriez plutôt regarder quelque chose comme EarlyUpdate .
J'ai remarqué que la plupart des réponses ici expliquaient clairement pourquoi FixedUpdate
était bon et quand l'utiliser. Cependant, je n’ai pas vu d’exemples clairs pour savoir quand Update
devrait être utilisé; Ce qui suit est tiré du tutoriel officiel de Unity :
Update()
FixedUpdate()
FixedUpdate()
les intervalles sont cohérents, c.-à-d. espacés uniformémentUpdate (): contient ce code qui doit être exécuté avec un rendu visuel
FixedUpdate (): contient ce code qui doit être synchronisé avec l'interaction physique