Déplacements dans Unity :
Translate(), RigidBody2D, etc.
Approche 1 :
Déplacer en n’utilisant pas la physique (ex : avec Translate(), ou transform.position += …)
Mis en oeuvre dans un Update()
- Désavantage: La physique n'est pas calculée correctement lors du déplacement
- Préférable pour animer des objets qui n’ont pas besoin de physique (exemple : fenêtre de UI qui sort de l’écran, neige qui tombe sans collisions, nuages qui traversent le ciel, sprites de jeux classiques 2d simples (les bulles dans le Jeu Bulle par exemple), etc.)
Approche 2 :
Agir sur un RigidBody2D (déplacement avec la physique)
Mis en œuvre dans un FixedUpdate()
- On applique un mouvement au RigidBody2D d’un objet
- _monRigidBody2D.velocity= valeur – ex : donne une vitesse constante (attention : changer directement velocity contourne les autres calculs de physique, incluant la gravité! Ça peut causer des problèmes…)
- _monRigidBody2D.AddForce() – ex : accélérer un projectile, une boule de billard, etc.
- _monRigidBody2D.MovePosition() – Souvent préféré : C'est un peu comme un Translate() mais qui tiendrait compte de la physique. Cela permet de déplacer un objet en modifiant sa position tout laissant Unity tenir compte des autres calculs de physique correctement. Attention! Si l’objet va trop vite, il peut quand même passer à travers les objets. Pour éviter cela, on peut activer "continuous" au lieu de "discrete" comme détection de collision au RigidBody (mais cela est plus exigeant pour le processeur).
- _monRigidBody2D.MoveRotation() – Même principe que pour MovePosition, mais appliqué à la rotation du RigidBody2D