Recherche…


Corps rigides

Vue d'ensemble

Le composant Rigidbody donne à un GameObject une présence physique dans la scène en ce qu’il est capable de répondre aux forces. Vous pouvez appliquer des forces directement sur le GameObject ou lui permettre de réagir à des forces externes telles que la gravité ou un autre corps rigide qui le frappe.


Ajouter un composant Rigidbody

Vous pouvez ajouter un Rigidbody en cliquant sur Composant> Physique> Rigidbody


Déplacement d'un objet Rigidbody

Si vous utilisez un Rigidbody sur un GameObject, il est recommandé d’utiliser des forces ou un couple pour le déplacer plutôt que de le transformer. Utilisez les AddForce() ou AddTorque() pour cela:

// Add a force to the order of myForce in the forward direction of the Transform.
GetComponent<Rigidbody>().AddForce(transform.forward * myForce);

// Add torque about the Y axis to the order of myTurn.
GetComponent<Rigidbody>().AddTorque(transform.up * torque * myTurn);

Masse

Vous pouvez modifier la masse d'un objet Rigidbody GameObject pour influer sur la façon dont il réagit avec les autres corps rigides et les autres forces. Une masse plus élevée signifie que le GameObject aura plus d'influence sur d'autres GameObjects basés sur la physique et nécessitera une plus grande force pour se déplacer. Les objets de masse différente tomberont au même rythme s'ils ont les mêmes valeurs de glissement. Modifier la masse en code:

GetComponent<Rigidbody>().mass = 1000;

Traîne

Plus la valeur de glissement est élevée, plus un objet ralentira en se déplaçant. Pensez-y comme une force adverse. Pour modifier le glisser dans le code:

GetComponent<Rigidbody>().drag = 10;

isKinematic

Si vous marquez un Rigidbody comme Kinematic, il ne peut pas être affecté par d'autres forces, mais il peut toujours affecter d'autres GameObjects. Pour modifier dans le code:

GetComponent<Rigidbody>().isKinematic = true;

Contraintes

Il est également possible d'ajouter des contraintes à chaque axe pour geler la position ou la rotation du corps rigide dans l'espace local. La valeur par défaut est RigidbodyConstraints.None comme indiqué ici:

entrer la description de l'image ici

Un exemple de contraintes dans le code:

// Freeze rotation on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation 

// Freeze position on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition 

// Freeze rotation and motion an all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll 

Vous pouvez utiliser l'opérateur OR au niveau du bit | pour combiner plusieurs contraintes comme ceci:

// Allow rotation on X and Y axes and motion on Y and Z axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ | 
    RigidbodyConstraints.FreezeRotationX;

Les collisions

Si vous souhaitez qu'un GameObject avec un Rigidbody y réponde, vous devrez également ajouter un collisionneur. Les types de collisionneur sont:

  • Boîte collisionneur
  • Sphère collisionneur
  • Collisionneur de capsules
  • Roue collisionneur
  • Collisionneur de maille

Si vous appliquez plusieurs collisionneurs à un objet GameObject, nous l'appelons un collisionneur composé.

Vous pouvez créer un collider dans un déclencheur afin d'utiliser les OnTriggerEnter() , OnTriggerStay() et OnTriggerExit() . Un collisionneur de déclenchement ne réagira pas physiquement aux collisions, les autres GameObjects le traversent simplement. Ils sont utiles pour détecter lorsqu'un autre objet GameObject se trouve dans une zone donnée ou non, par exemple, lors de la collecte d'un élément, nous pouvons être en mesure de le parcourir, mais détecter quand cela se produit.

Gravité dans un corps rigide

La propriété useGravity d'un RigidBody contrôle si la gravité l'affecte ou non. Si défini sur false le RigidBody se comportera comme si dans l'espace (sans qu'une force constante lui soit appliquée dans une certaine direction).

GetComponent<RigidBody>().useGravity = false;

C'est très utile dans les situations où vous avez besoin de toutes les autres propriétés de RigidBody à l'exception du mouvement contrôlé par gravité.

Lorsque cette RigidBody est activée, le RigidBody sera affecté par une force gravitationnelle définie sous Physics Settings :

entrer la description de l'image ici

La gravité est définie en unités mondiales par seconde au carré et est entrée ici en tant que vecteur tridimensionnel: avec les paramètres de l'image d'exemple, tous les RigidBodies avec la propriété useGravity définie sur True auront une force de 9,81 unités mondiales par seconde. par seconde dans la direction vers le bas (lorsque les valeurs Y négatives dans le système de coordonnées d'Unity sont orientées vers le bas).



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow