Unité - Corps rigides et physique

Le principal problème avec les collisions dans le dernier chapitre était avec le code. We will now modify the values of the GameObject’s position directly. Nous ajoutons simplement une valeur à la position, si le joueur appuie sur une touche. Nous avons besoin d'un moyen de faire bouger le joueur de manière à ce qu'il réagisse correctement aux limites et aux autres GameObjects.

Pour ce faire, nous devons comprendre ce rigidbodiessont. Les corps rigides sont des composants qui permettent à un GameObject de réagirreal-time physics. Cela comprend les réactions aux forces et à la gravité, à la masse, à la traînée et à l'élan.

Vous pouvez attacher un Rigidbody à votre GameObject en cliquant simplement sur Add Component et en tapant Rigidbody2D dans le champ de recherche.

Cliquez sur Rigidbody2D pour attacher le composant à votre GameObject. Maintenant qu'il est attaché, vous remarquerez que de nombreux nouveaux champs se sont ouverts.

Avec les paramètres par défaut, le GameObject tombera verticalement downen raison de la gravité. Pour éviter cela, définissez leGravity Scale à 0.

Maintenant, jouer au jeu ne montrera aucune différence visible, car le GameObject n'a encore rien à voir avec son composant physique.

Pour résoudre notre problème, ouvrons à nouveau notre code et réécrivons-le.

public class Movement : MonoBehaviour {
   public float speed;
   public Rigidbody2D body;
   // Update is called once per frame
   void Update() {
      float h = Input.GetAxisRaw(“Horizontal”);
      float v = Input.GetAxisRaw(“Vertical”);
      body.velocity = new Vector2(h * speed, v * speed);
   }
}

Nous pouvons voir que nous créons un referenceà un Rigidbody2D dans les déclarations, et notre code de mise à jour fonctionne sur cette référence au lieu de la transformation de l'objet. Cela signifie que le Rigidbody a maintenant la responsabilité de se déplacer.

Vous pouvez vous attendre à bodyreference to throw NullReferenceException, puisque nous ne lui avons rien assigné. Si vous compilez et exécutez le jeu tel quel, vous obtiendrez l'erreur suivante en bas à gauche de l'éditeur

Pour résoudre ce problème, considérons le composant créé par le script. N'oubliez pas que les propriétés publiques créent leurs propres champs dans Unity, comme nous l'avons fait avec la variable de vitesse.

Ajustez la vitesse à une valeur plus élevée, environ 5, et jouez au jeu.

Vos collisions fonctionneront désormais correctement!