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); } } 

Commentaires

  • Excellente réponse! Cela peut valoir la peine dinclure que vous pouvez créer une coroutine qui attend FixedUpdate avant de sexécuter; démarrer cette coroutine à partir dune méthode start vous donne effectivement un LateFixedUpdate (qui, bien que pas aussi utile, a ses utilisations).
  • Multiplier par Time.deltaTime est toujours une bonne idée dans FixedUpdate. Il vous permet dexprimer des choses comme des vitesses en " unités par seconde " au lieu de " unités par tick " et si vous modifiez votre pas de temps fixe, vous naurez pas à ' revenir en arrière et régler à nouveau tous vos paramètres pour obtenir le mêmes vitesses. Lavantage de FixedUpdate est que Time.deltaTime renvoie toujours le fixedDeltaTime stable lorsquil est accédé à partir de FixedUpdate, plutôt que dobtenir un résultat variable à chaque image en fonction de la fréquence dimages et de la mise à léchelle du temps, comme il le fait dans Update. / div>

    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

    • La mise à jour physique est contrôlable? Je veux dire que si je règle Fixed TimeStep sur une valeur, la mise à jour fixe sexécutera après cette heure? et la physique du jeu fonctionnera aussi après ce laps de temps?
    • @MuhammadFaizanKhan Cela devrait être ainsi que cela fonctionne. Je ' ne suis pas sûr dans la version actuelle de Unity, cétait comme ça quand jai écrit la réponse. Fondamentalement, la mise à jour est mise à jour à chaque image et la physique a sa propre fréquence dimages et sa propre fonction de mise à jour distincte de lautre fonction de mise à jour.

    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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *