Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Unity3D
  3. Le moteur physique
Extrait - Unity3D Développer en C# des applications 2D/3D multiplateformes (iOS, Android, Windows...)
Extraits du livre
Unity3D Développer en C# des applications 2D/3D multiplateformes (iOS, Android, Windows...)
1 avis
Revenir à la page d'achat du livre

Le moteur physique

Présentation du moteur physique

Afin de rendre réaliste le comportement des objets dans une scène, il faut l’aide d’un moteur physique permettant d’appliquer la gravité, de calculer les collisions et plus simplement, d’appliquer une force. Tout cela est fourni de base dans Unity et s’applique aux objets grâce à des composants comme le Rigidbody ou le Collider.

Il est donc possible de créer dans une scène de nombreux objets qui pourront réagir les uns avec les autres de façon réaliste. Bien entendu, chaque objet peut être contrôlé via un script afin de lui ajouter une force pour le mettre en mouvement par exemple.

Unity fonctionne avec deux moteurs physiques distincts, un pour la 3D et un autre pour la 2D. Leurs fonctionnements sont quasiment similaires, ils utilisent seulement des composants différents (Rigidbody pour la 3D et Rigidbody2D pour la 2D). Cela est dû au fait que le nombre de dimensions à prendre en compte est différent, ce qui simplifie les calculs pour un jeu 2D, une dimension en moins étant à gérer.

Pour bien comprendre comment fonctionnent les différents composants avec le moteur physique 3D, nous allons créer tout au long de ce chapitre des exemples d’utilisation de ceux-ci.

Dans ce livre, nous ne traiterons que des composants utilisés pour le moteur physique...

Le composant Rigidbody

1. Introduction

Le Rigidbody est le composant de base afin d’activer le comportement du moteur physique à un objet. Une fois le composant ajouté à un GameObject, celui-ci devient influencé par la gravité ainsi que par les forces qui lui sont appliquées. 

images/09_02_01.png

2. La gravité

Nous allons voir comment mettre en place la gravité, la paramétrer mais aussi la désactiver.

 Créez une nouvelle scène (File - New Scene).

 Dans la fenêtre Hierarchy, ajoutez une sphère à la scène (Create - 3D Object - Sphere).

 Dans la fenêtre Inspector, ajoutez-lui le composant Rigidbody (Add Componant - Physics - Rigidbody).

images/09_02_02.png

Le composant Rigidbody est donc paramétré par défaut pour avoir une masse (Mass) à 1 et pour être sensible à la gravité, la propriété Use Gravity étant cochée. Si vous lancez le jeu, vous devriez donc voir la sphère tomber à l’infini ce qui n’est pas le cas sans le composant Rigidbody.

 Ouvrez la fenêtre PhysicsManager à partir du menu Edit - Project Settings - Physics et inversez la gravité en modifiant la valeur de Gravity sur l’axe Y à 9.81, la valeur par défaut étant -9.81.

images/09_02_03.png

En relançant l’application, la sphère ne devrait plus être attirée...

Le composant Collider

1. Introduction

Pour permettre à un objet de pouvoir rentrer en collision avec un autre, les deux objets doivent obligatoirement contenir un composant de type Collider. Ce composant définit la forme de l’objet qui sera utilisé pour détecter les collisions. Totalement transparente, cette forme est très souvent une approximation de l’objet pour des raisons de performance car plus la forme est simple, plus les calculs de détection de collisions le sont aussi. Il n’est pas nécessaire qu’elle soit parfaitement représentative de l’objet réel car cela ne provoque que très peu de changement au niveau de la jouabilité.

2. Statique ou dynamique

Chaque objet peut disposer d’un composant Collider, qu’il ait un Rigidbody ou non. On parle de static collider dans le cas où un objet ne possède pas de Rigidbody comme le sol ou un mur par exemple. Il est recommandé de ne pas modifier le Transform de cet objet car cela peut poser des problèmes de performance. Dans le cas où l’objet contient un Rigidbody, on parle de dynamic collider. Lorsque deux dynamic colliders entrent en collision, ils bougeront tous les deux. Ce qui n’est pas le cas lors d’une collision entre un static collider et un dynamic collider car seul l’objet ayant un Rigidbody bougera.

3. Les colliders primitifs

Unity met à disposition des colliders, dits primitifs, reposant sur des formes géométriques simples, ce qui permet des performances accrues.

a. SphereCollider

Ce composant permet de représenter une forme sphérique. Il est défini grâce aux propriétés Center et Radius. Le rayon (Radius) est obligatoirement le même sur les trois axes, il n’est pas possible de définir un rayon différent sur chacun des axes.

images/09_03_01.png

b. BoxCollider

Ce composant permet de représenter une forme cubique. Il est défini grâce aux propriétés Center et Size. Contrairement au SphereCollider, il est possible de définir une taille (Size) différente pour chacun des axes. Pour ajouter un collider pour un mur ou un sol, on utilisera ce type de collider.

images/09_03_02.png

c. CapsuleCollider

Ce composant permet de représenter une forme cubique coupée en deux avec une partie cylindrique en son centre. Il est défini...

Les composants Joints

1. Introduction

Pour assembler un objet avec un autre, Unity fournit des composants permettant de mimer des joints de différentes sortes. Il va donc être possible de lier un objet statique, comme un plafond, pour lui fixer un objet dynamique, comme une lampe suspendue. Cette lampe pourra donc se balancer librement grâce à l’ajout d’un composant permettant de définir la liaison entre les deux objets (axes de rotation…).

2. FixedJoint

Le composant FixedJoint permet de contraindre le mouvement d’un objet par rapport à un autre. Concrètement, cela revient à la même chose que l’assemblage de deux objets en utilisant un lien de parenté (parent - fils). Néanmoins, il est plus facile de déconnecter la jointure via le FixedJoint et la propriété Connected Body plutôt que de refaire la hiérarchie des objets. Mais la grande force du composant est de pouvoir définir une force de rupture (Break Force et Break Torque) à partir de laquelle la liaison est brisée.

images/09_04_01.png

3. SpringJoint

Le composant SpringJoint permet de définir une liaison de type ressort. De la même manière que le FixedJoint, les deux objets sont liés mais une certaine distance entre les deux est tolérée.

La propriété Spring permet de régler la force du ressort tandis que la propriété...