le composant Rigidbody

Les Rigidbodies permettent à votre GameObject d'agir sous le contrôle de la physique. Le Rigidbody peut recevoir des forces et une torsion pour faire bouger vos objets de façon réaliste. Tout GameObject doit contenir un Rigidbody pour être influencé par la gravité, agir sous des forces supplémentaires via des scripts, ou interagir avec d'autres objets via le moteur de physique NVIDIA PhysX.

Le composant Rigidbody dans l'inspecteur
Le composant Rigidbody dans l'inspecteur.

Propriétés

PropriétéFonction
MassLa masse de l'objet (en kilogrammes par défaut).
DragCombien de résistance de l'air affecte l'objet lors du déplacement des forces. 0 signifie aucune résistance à l'air, et l'infini fait arrêter immédiatement l'objet se déplaçant.
Angular DragCombien de résistance de l'air affecte l'objet lors de la rotation de la torsion. 0 signifie aucune résistance à l'air. Notez que vous ne pouvez pas faire arrêter de tourner l'objet en définissant son glissement angulaire jusqu'à l'infini.
Use GravityS'il est activé, l'objet est affecté par la gravité.
Is KinematicS'il est activé, l'objet ne sera pas piloté par le moteur de la physique et ne pourra être manipulé que par sa transformation (Transform). Ceci est utile pour déplacer des plates-formes ou si vous souhaitez animer un Rigidbody qui a un HingeJoint attaché.
InterpolateEssayez l'une des options seulement si vous voyez une instabilitée dans le mouvement de votre RigidBody.
- NoneAucune interpolation n'est appliquée.
- InterpolateLa transformation est lissée en fonction de la transformation de la frame précédente.
- ExtrapolateLa transformation est lissée en fonction de la transformation estimée de la prochaine frame.
Collision DetectionUtilisé pour empêcher les objets en mouvement rapide de passer à travers d'autres objets sans détecter de collisions.
- DiscreteUtilise la détection de collision discrète contre tous les autres collisions dans la scène. D'autres collisions utiliseront la détection de collision discrète lors des essais de collision contre elle. Utilisé pour les collisions normales (c'est la valeur par défaut).
- ContinuousUtilise la détection de collision discrète contre les collisions dynamiques (avec un rigidbody) et détection de collisions continues contre les MeshColliders statiques (sans rigidbody). Les Rigidbodies définis sur Continuous Dynamic utiliseront la détection de collision continue lors du test de collision avec ce rigidbody. D'autres rigidbodies utiliseront la détection de collision discrète. Utilisé pour les objets dont la détection dynamique continue doit entrer en collision (Cela a un impact majeur sur la performance de la physique, laissez-le en mode Discret, si vous n'avez pas de problèmes avec des collisions d'objets rapides).
- Continuous DynamicUtilise la détection de collision continue contre les objets définis en collision dynamique continue (Continuous Dynamic) et continue (Continuous). Il utilisera également une détection de collision continue contre les MeshColliders statiques (sans rigidbody). Pour toutes les autres collisions, il utilise une détection discrète des collisions. Utilisé pour les objets en mouvement rapide.
ConstraintsRestrictions sur le mouvement du Rigidbody
- Freeze PositionEmpêche le Rigidbody de se déplacer dans le monde sur les axes X, Y et Z de manière sélective.
- Freeze RotationEmpêche le RigidBody de tourner autour des axes locaux X, Y et Z de manière sélective.

Détails

Les corps rigides (Rigidbodies) permettent à votre GameObject d'agir sous le contrôle du moteur de la physique. Cela ouvre la porte d'accès à des collisions réalistes, à des types variés d'articulations et à d'autres comportements très cool. Manipuler vos GameObjects en ajoutant des forces à un Rigidbody crée une sensation et une apparence très différentes que l'ajustement direct du composant Transform. Généralement, vous ne devriez pas manipuler le RigidBody et la transformation du même gameobject - seulement l'un ou l'autre.

La plus grande différence entre la manipulation de la transformation (Transform) par rapport au Rigidbody est l'utilisation des forces. Les Rigidbodies peuvent recevoir des forces et une torsion, mais Transform ne peut pas. Les transformations peuvent être traduites et tournées, mais ce n'est pas le même que l'utilisation de la physique. Vous remarquerez la différence distincte lorsque vous l'essayez par vous-même. L'ajout de forces / torsions au Rigidbody modifiera réellement la position et la rotation de l'objet du composant Transform. C'est pourquoi vous ne devriez utiliser que l'un ou l'autre. Changer la transformation en utilisant la physique pourrait causer des problèmes de collisions et d'autres calculs. Les Rigidbodies doivent être explicitement ajoutés à votre GameObject avant qu'ils ne soient affectés par le moteur de physique. Vous pouvez ajouter un Rigidbody à votre objet sélectionné dans le menu Components > Physics > Rigidbody. Maintenant, votre objet est prêt pour la physique; il tombera sous la gravité et peut recevoir des forces via des scripts, mais vous devrez peut-être ajouter une collision (Collider) ou une articulation (Joint) pour que cela se comporte exactement comme vous le souhaitez.

Parenté

Quand un objet est sous le contrôle de physique, il se déplace semi-indépendamment de la façon dont les Transform de ses parents se déplacent. Si vous déplacez un parent, ils vont attirer l'enfant Rigidbody avec eux. Cependant, les corps rigides vont encore tomber en raison de la gravité et réagir aux événements de collision.

Scripting

Pour contrôler vos Rigidbodies, vous utiliserez principalement des scripts pour ajouter des forces ou des torsions. Vouspouvez faire cela en appelant AddForce() et AddTorque() sur le Rigidbody de l'objet. N'oubliez pas que vous ne devez pas modifier directement le Transform de l'objet lorsque vous utilisez la physique.

Animation

Pour certaines situations, créant principalement des effets de ragdoll, il faut changer le contrôle de l'objet entre les animations et la physique. Pour cela, les Rigidbodies peuvent être marqués isKinematic. Bien que le RigidBody soit marqué isKinematic, il ne sera pas affecté par les collisions, les forces ou toute autre partie du système physique. Cela signifie que vous devrez contrôler l'objet en manipulant le composant Transform directement. Les Rigidbodies isKinematic affecteront d'autres objets, mais ils ne seront pas affectés par la physique. Par exemple, les articulations (Joints) qui sont attachées à des objets cinématiques (Kinematic) limiteront tout autre Rigidbodies qui leur est attaché et les Rigidbodies cinématiques affecteront d'autres Rigidbodies par des collisions.

Colliders

Les collisionneurs (Colliders) sont un autre type de composant qui doit être ajouté aux côtés du Rigidbody afin de permettre l'apparition de collisions. Si deux Rigidbodies se heurtent l'un à l'autre, le moteur de physique ne calculera pas de collision à moins que les deux objets aient un collisionneur attaché.

Les Colliders définissent les limites physiques d'un corps rigide
Les Colliders définissent les limites physiques d'un corps rigide.

Ajoutez un collider avec le menu Component > Physics. Voir la page de référence des composants de chaque Collider individuel pour plus d'informations spécifiques :

  • Box Collider - Forme primitive d'un cube.
  • Sphere Collider - Forme primitive d'une sphère.
  • Capsule Collider - Forme primitive d'une capsule.
  • Mesh Collider - Crée un collision à partir du maillage de l'objet, ne peut pas entrer en collision avec un autre Mesh Collider.
  • Wheel Collider - Spécifiquement pour la création de voitures ou d'autres véhicules en mouvement.
  • Terrain Collider - S'attaque au système de terrain d'Unity.

Collisions composées

Les collisions composées (Compound Colliders) sont des combinaisons de collisions primordiales, agissant collectivement comme un collision unique. Ils sont utiles lorsque vous avez un modèle qui serait trop complexe ou coûteux en termes de performance pour simuler exactement, et que vous souhaitez simuler la collision de la forme d'une manière optimale en utilisant des approximations simples. Pour créer un Compound Collider, créez des objets enfants de votre objet, puis ajoutez un composant de collision à chaque objet enfant. Cela vous permet de positionner, de faire pivoter et redimensionner chaque collision facilement et indépendamment les unes des autres.Vous pouvez créé votre Compound Colliders à partir d'un certain nombre de collisions primordiales et / ou de collisions convexes.

Une configuration de Compound Colliders du monde réel
Une configuration de Compound Colliders du monde réel.

Détection de collision continue

La détection de collision continue (Continuous Collision Detection) est une caractéristique pour empêcher les collisions rapides de se croiser. Cela peut se produire lors de l'utilisation d'une détection de collision normale (Discrete), lorsqu'un objet est un côté d'un collider dans une frame, et a déjà dépassé le collider dans la frame suivante. Pour résoudre ce problème, vous pouvez activer la détection de collision continue sur le rigidbody de l'objet en mouvement rapide. Réglez le mode de détection de collision sur Continuous afin d'éviter que le rigidbody ne traverse des MeshColliders statiques (C'est-à-dire un corps non rigide - non-rigidbody). Réglez-le sur Continuous Dynamic pour empêcher également le RigidBody de traverser n'importe quel autre rigidbodies pris en charge avec le mode de détection de collision sur Continuous ou Continuous Dynamic. La détection de collision continue est supportée pour Box Collider, Sphere Collider et Capsule Collider. Notez que la détection de collision continue est conçue comme un filet de sécurité pour intercepter les collisions dans les cas où des objets passeraient à travers d'autres, mais ne fournira pas physiquement des résultats de collision précis, de sorte que vous pourriez toujours envisager de diminuer la valeur de l'étape de Time dans l'inspecteur TimeManager pour rendre la simulation plus précise, si vous rencontrez des problèmes avec des objets en mouvement rapide.

Utiliser la bonne taille

La taille du maillage de votre GameObject est beaucoup plus importante que la masse du Rigidbody. Si vous trouvez que votre Rigidbody ne se comporte pas exactement comme vous vous attendez - il se déplace lentement, flotte ou ne se heurte pas correctement - pensez à ajuster la taille de votre élément de maillage (mesh). L'échelle unitaire par défaut de Unity est de 1 unité (unit) = 1 mètre, de sorte que la taille de votre maillage importé est maintenue et appliquée aux calculs physiques. Par exemple, un gratte-ciel en ruine va s'effondrer très différemment d'une tour faite de blocs de jouets, les objets de différentes tailles devraient être modélisés à l'échelle exacte.

Si vous modélisez un humain, assurez-vous que le modèle mesure environ 2 mètres de haut en unité. Pour vérifier si votre objet a la bonne taille, comparez-le au cube par défaut. Vous pouvez créer un cube dans le menu GameObject > 3D Object > Cube. La hauteur du cube sera exactement de 1 mètre, donc votre humain devrait être deux fois plus grand. Si vous n'êtes pas en mesure d'ajuster le maillage lui-même, vous pouvez modifier la taille uniforme d'un élément de maillage (mesh) particulier en le sélectionnant dans Project View et en choisissant dans le menu Assets > Import Settings. Ici, vous pouvez modifier l'échelle et réimporter votre mesh.

Si votre jeu nécessite que votre GameObject soit instancié à différentes tailles, il est judicieux d'ajuster les valeurs des axes d'échelle de votre Transform. L'inconvénient est que la simulation de la physique doit faire plus de travail au moment où l'objet est instancié et pourrait entraîner une baisse de performance dans votre jeu. Ce n'est pas une perte terrible, mais ce n'est pas aussi efficace que de finaliser votre échelle avec les deux autres options. Gardez également à l'esprit que les échelles non uniformes peuvent créer des comportements indésirables lorsque l'utilisation parentale est utilisée. Pour ces raisons, il est toujours optimal de créer votre objet à l'échelle correcte dans votre application de modélisation.

Astuces

  • La masse relative de deux Rigidbodies détermine comment ils réagissent lorsqu'ils entrent en collision les uns avec les autres.
  • Faire en sorte qu'un Rigidbody ait une masse supérieure à celle d'un autre ne le fait pas tomber plus vite en chute libre. Utilisez Drag pour cela.
  • Une faible valeur de Drag rend un objet lourd. Une valeur élevée fait paraître léger. Les valeurs typiques pour Drag sont entre 0,001 (bloc solide de métal) et 10 (plume).
  • Si vous manipulez directement le composant Transform de votre objet, vous souhaitez toujours avoir une physique, attacher un Rigidbody et rattacher Kinematic.
  • Si vous déplacez un GameObject via son composant Transform, mais vous souhaitez recevoir des messages Collision / Trigger, vous devez attacher un Rigidbody à l'objet qui se déplace.
  • Vous ne pouvez pas arrêter un objet de tourner simplement en définissant son glissement angulaire (Angular Drag) à l'infini.

les réactions

Pour laisser un avis, vous devez être inscrit et connecté

Se connecter