web-dev-qa-db-fra.com

Quelle est la différence entre Update et FixedUpdate dans Unity?

Quelle est la différence entre les méthodes Update et FixedUpdate, et quand utiliser ces méthodes?

39
Kapil11

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!

43
Rahul Tripathi

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.

38
Rickest Rick

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 .

5
Semimono

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()

  • Appelée toutes les images
  • Utilisé pour les mises à jour régulières telles que:
    • Déplacement d'objets non physiques
    • Minuteries simples
    • Recevoir une entrée (aka presser etc.)
  • Les durées d’appel des intervalles de mise à jour peuvent varier, c’est-à-dire qu’elles ne sont pas espacées uniformément

FixedUpdate()

  • Appelée à chaque étape de physique
  • FixedUpdate() les intervalles sont cohérents, c.-à-d. espacés uniformément
  • Utilisé pour des mises à jour régulières telles que l'ajustement d'objets physiques (par exemple, RigidBody)
2
jfunk

Update (): contient ce code qui doit être exécuté avec un rendu visuel

FixedUpdate (): contient ce code qui doit être synchronisé avec l'interaction physique

source: https://youtu.be/noXtT_zN-84?t=3057

1
Raman Kumar