Je connais quelques différences entre Update()
et FixedUpdate()
et récemment jai utilisé les deux fonctions dans un seul script. Le code fonctionne, mais jai une question:
Lutilisation de ces deux fonctions pose-t-elle des problèmes? Est-il sûr de les utiliser tous les deux?
Réponse
Ordre de mise à jour
Lorsque vous suivez la logique et les interactions du jeu, les animations, les positions de caméra, etc., vous pouvez utiliser différents événements. Le modèle courant consiste à effectuer la plupart des tâches à lintérieur de la fonction de mise à jour, mais vous pouvez également utiliser dautres fonctions.
FixedUpdate:
FixedUpdate est souvent appelé plus fréquemment que Update.
Il peut être appelé plusieurs fois par image si la fréquence dimages est faible et il peut ne pas être appelé du tout entre les images si la fréquence dimages est élevée. Tous les calculs et mises à jour physiques se produisent immédiatement après FixedUpdate. Lorsque vous appliquez des calculs de mouvement dans FixedUpdate, vous navez pas besoin de multiplier vos valeurs par Time.deltaTime.
FixedUpdate est appelé sur une minuterie fiable, indépendante de la fréquence dimages
.
Mise à jour:
La mise à jour est appelée une fois par image. Cest la principale fonction de bourreau de travail pour les mises à jour des cadres.
LateUpdate:
LateUpdate est appelé une fois par image une fois la mise à jour terminée.
Tous les calculs effectués dans Update seront terminés au début de LateUpdate. Une utilisation courante de LateUpdate serait une caméra à la troisième personne suivante. Si vous faites bouger votre personnage et vous tournez dans Update, vous pouvez effectuer tous les calculs de mouvement et de rotation de la caméra dans LateUpdate. Cela garantira que le personnage a complètement bougé avant que la caméra ne suive sa position.
Utiliser simultanément la mise à jour fixe, la mise à jour et la mise à jour tardive est sûr.
using UnityEngine; using System.Collections; public class CheckFunctionExecutionOrder : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } void LateUpdate() { Debug.Log("late Update time :" + Time.deltaTime); } }
Réponse
En fait, ils sexécutent tous en même temps, vos scripts font juste des choses dans ces fonctions. Update est appelée une fois par image et FixedUpdate est appelée une fois par « mise à jour physique » (qui est une fois par durée fixe que vous pouvez régler).
Il existe également LateUpdate , si vous souhaitez que certaines fonctions soient exécutées après la fonction de mise à jour de ce cadre de référence. Pour obtenir la liste complète des messages, consultez la référence MonoBehaviour .
Voici « un lien vers le Tutoriel Unity qui couvre ceci .
Commentaires
Réponse
Il est sûr dutiliser Update (), FixedUpdate () et LateUpdate () dans un seul script. Au moins je le fais et je nai jamais eu de problèmes.Jutiliserai généralement Update () pour mes boucles principales, FixedUpdate () pour des choses comme la physique, et LateUpdate () pour les boucles que je veux exécuter après tout le reste.