les composants Colliders

Les composants Collider définissent la forme d'un objet pour les collisions physiques. Un collider, invisible, n'a pas besoin d'avoir exactement la même forme que le maillage de l'objet, une approximation est souvent plus efficace et indiscernable dans le gameplay. Les colliders les plus simples (et les moins gourmands pour le processeur) sont les types dits de collision primitive.

En 3D, ce sont les Box Collider, Sphere Collider et les Capsule Collider. En 2D, vous pouvez utiliser les Box Collider 2D et les Circle Collider 2D. N'importe quel nombre de ceux-ci peuvent être ajoutés à un seul objet pour créer des collisions composées.

Avec un positionnement et un dimensionnement rigoureux, les collisions composées peuvent souvent se rapprocher de la forme d'un objet tout en gardant une faible surcharge pour le processeur. Une plus grande flexibilité peut être obtenue en ayant des collisions supplémentaires sur des objets enfants (Par exemple, les boîtes peuvent être tournées par rapport aux axes locaux de l'objet parent). Lors de la création d'un collisionneur composé comme celui-ci, il ne devrait y avoir qu'un composant Rigidbody, placé sur l'objet racine dans la hiérarchie.

Notez que les colliders primitifs ne fonctionneront pas correctement avec des transformations de cisaillement - cela signifie que si vous utilisez une combinaison de rotations et de redimensionnements non uniformes dans la hiérarchie de transform, de sorte que la forme résultante ne correspond plus à une forme primitive, le collider primitif ne pourra pas le représenter correctement.

Il y a cependant quelques cas où même les collisions composées ne sont pas suffisamment précises. En 3D, vous pouvez utiliser les Mesh Colliders pour correspondre exactement à la forme du maillage (meshe) de l'objet. En 2D, le Polygon Collider 2D ne correspond généralement pas parfaitement à la forme du sprite, mais vous pouvez affiner la forme comme vous le souhaitez. Ces colliders sont beaucoup plus exigeants que les types primitifs, mais utilisez-les avec modération pour maintenir de bonnes performances. En outre, un mesh collider ne pourra normalement pas entrer en collision avec un autre mesh collider (c'est-à-dire que rien ne se passera quand ils entreront en contact). Vous pouvez contourner cela dans certains cas en marquant le mesh collider comme Convex dans l'inspecteur. Cela générera la forme du collider comme une «coque convexe» qui ressemble à la maille d'origine mais avec toutes les coupures remplies. Le bénéfice de cela est qu'un mesh collider convexe peut entrer en collision avec d'autres mesh colliders, afin que vous puissiez utiliser cette fonctionnalité lorsque vous avez un personnage en mouvement avec une forme appropriée. Cependant, une bonne règle générale consiste à utiliser des mesh colliders pour la géométrie des scènes et à rapprocher la forme des objets en mouvement à l'aide de colliders primitifs composées.

Les colliders peuvent être ajoutées à un objet sans composant Rigidbody pour créer des planchers, des murs et d'autres éléments immobiles d'une scène. Ceux-ci sont appelés des colliders statiques. Généralement, vous ne devriez pas repositionner les colliders statiques en modifiant la position du Transform, car cela aura un impact considérable sur les performances du moteur de physique. Les colliders qui sont sur un objet qui possède un Rigidbody sont connues sous le nom de colliders dynamiques. Les colliders statiques peuvent interagir avec des colliders dynamiques, mais étant donné qu'elles n'ont pas de Rigidbody, elles ne se déplaceront pas en réponse aux collisions.

Matériaux de physique

Lorsque les colliders interagissent, leurs surfaces doivent simuler les propriétés du matériau qu'ils sont censés représenter. Par exemple, une feuille de glace sera glissante alors qu'une boule en caoutchouc offrira beaucoup de friction et sera très gonflable. Bien que la forme des collisions ne soit pas déformée pendant les collisions, leur frottement et leur rebond peuvent être configurés à l'aide de Physics Materials. Notez que pour des raisons historiques, l'asset 3D est en réalité appelé Physic Material (sans S), mais l'équivalent 2D s'appelle Physics Material 2D (avec le S).

Triggers

Le système de script peut détecter les collisions et lancer des actions à l'aide de la fonction OnCollisionEnter. Cependant, vous pouvez également utiliser le moteur de la physique pour détecter simplement quand un collider pénètre dans l'espace sans créer de collision. Un collider configuré en tant que déclencheur (trigger) (utilisant la propriété Is Trigger) ne se comporte pas comme un objet solide et permettra simplement à d'autres colliders de passer. Lorsqu'un collider entre dans son espace, un déclencheur appellera la fonction OnTriggerEnter sur les scripts de l'objet déclencheur.

Événement de collision

Lorsque des collisions se produisent, le moteur de la physique appelle des fonctions avec des noms spécifiques sur les scripts attachés aux objets concernés. Vous pouvez placer n'importe quel code que vous souhaitez dans ces fonctions pour répondre à l'événement de collision. Par exemple, vous jouerez un effet sonore lorsque qu'une voiture se heurte à un obstacle.

Sur la première mise à jour physique où la collision est détectée, on appelle la fonction OnCollisionEnter. Au cours des mises à jour où le contact est maintenu, OnCollisionStay est appelé et enfin, OnCollisionExit indique que le contact a été interrompu. Les Trigger colliders appellent les fonctions analogues OnTriggerEnter, OnTriggerStay et OnTriggerExit. Notez que pour la physique 2D, il existe des fonctions équivalentes avec 2D annexé au nom, par exemple, OnCollisionEnter2D. Avec des collisions normales et non déclenchantes (non-trigger), il existe un détail supplémentaire selon lequel au moins un des objets concernés doit comporter un Rigidbody non-kinematic (Is Kinematic doit être sur off). Si les deux objets sont des Rigidbodies kinematic, alors OnCollisionEnter, etc., ne seront pas appelés.

Interactions entre les colliders

Les colliders interagissent les uns avec les autres en fonction de la façon dont leurs composants Rigidbody sont configurés. Les trois configurations importantes sont le Static Collider (c.-à-d., Aucun Rigidbody n'est attaché), le Rigidbody Collider et le Kinematic Rigidbody Collider.

Static Collider

Il s'agit d'un GameObject qui a un collider mais pas de Rigidbody. Les Static Collider sont utilisées pour la géométrie de niveau qui reste toujours au même endroit et ne se déplace jamais. Les objets Rigidbody entreront en collision avec la collision statique (Static Collider) mais ne le déplaceront pas.

Le moteur de la physique suppose que les Static Collider ne se déplacent ou ne changent jamais et peut faire des optimisations utiles en fonction de cette hypothèse. Par conséquent, les collisions statiques ne doivent pas être désactivées / activées, déplacées ou mises à l'échelle pendant le jeu. Si vous modifiez une collision statique, cela entraînera une recalculation interne supplémentaire par le moteur de la physique qui entraînera une baisse majeure des performances. Pire encore, les changements peuvent parfois laisser le collider dans un état indéfini qui produit des calculs de physique erronée. Par exemple, un raycast contre une collision statique altérée pourrait ne pas le détecter ou le détecter dans une position aléatoire dans l'espace. En outre, les Rigidbodies touchés par un collisionneur statique en mouvement ne seront pas forcément "réveillés" et le collider statique n'appliquera aucun frottement. Pour ces raisons, seuls les colliders qui ont un Rigidbody devraient être modifiés. Si vous voulez un objet collider qui n'est pas affecté par Rigidbodies entrants, mais qui peut encore être déplacé à partir d'un script, vous devez attacher un composant Kinematic Rigidbody à celui-ci plutôt qu'aucun Rigidbody du tout.

Rigidbody Collider

Il s'agit d'un GameObject avec un Collider et d'un Rigidbody non-kinematic attaché. Les colliders Rigidbody sont entièrement simulés par le moteur de la physique et peuvent réagir aux collisions et aux forces appliquées à partir d'un script. Ils peuvent entrer en collision avec d'autres objets (y compris les collisions statiques) et sont la configuration Collider la plus couramment utilisée dans les jeux utilisant la physique.

Kinematic Rigidbody Collider

Il s'agit d'un GameObject avec un Collider et d'un Rigidbody kinematic attaché (c'est-à-dire que la propriété IsKinematic du Rigidbody est activée). Vous pouvez déplacer un rigidbody kinematic à partir d'un script en modifiant son composant de transformation, mais il ne répondra pas aux collisions et aux forces comme un rigidbody non-kinematic. Les rigidbodies kinematic doivent être utilisés pour les collisions qui peuvent être déplacées ou désactivées/activées occasionnellement, mais qui devraient se comporter autrement comme des collisions statiques. Un exemple de ceci est une porte coulissante qui devrait normalement agir comme un obstacle physique immobile mais peut être ouverte si nécessaire. Contrairement à un static collider, un rigidbody kinematic en mouvement appliquera du frottement à d'autres objets et "réveillera" d'autres rigidbodies lorsqu'ils prendront contact.

Même lorsqu'ils sont immobiles, les kinematic rigidbody colliders ont un comportement différent des static colliders. Par exemple, si le collider est configuré comme un déclencheur (trigger), vous devez également lui ajouter un rigidbody afin de recevoir des événements de déclenchement dans votre script. Si vous ne voulez pas que le trigger tombe sous la gravité ou soit affecté par la physique, vous pouvez définir la propriété IsKinematic sur son rigidbody.

Un composant Rigidbody peut être commuté entre le comportement normal et kinematic à tout moment en utilisant la propriété IsKinematic.

Un exemple commun de ceci est l'effet "ragdoll" où un personnage se déplace normalement sous l'animation mais est jeté physiquement par une explosion ou une collision importante. Les membres du personnage peuvent chacun recevoir leur propre composant Rigidbody avec IsKinematic activé par défaut. Les membres se déplacent normalement par l'animation jusqu'à ce que IsKinematic soit éteint pour tous et ils se comportent immédiatement comme des objets de physique. À ce stade, une collision ou une force d'explosion enverra le personnage voler avec ses membres jetés de manière convaincante.

Matrice d'action de collision

Lorsque deux objets entrent en collision, un certain nombre d'événements de script différents peuvent se produire selon les configurations des rigidbodies des objets en collision. Les tableaux ci-dessous donnent des détails sur les fonctions d'événement appelées en fonction des composants qui sont attachés aux objets. Certaines combinaisons ne provoquent que l'un des deux objets à être affectés par la collision, mais la règle générale est que la physique ne sera pas appliquée à un objet qui n'a pas de composant RigidBody attaché.

La détection de collision se produit et les messages sont envoyés lors d'une collision
Static ColliderRigidbody ColliderKinematic Rigidbody ColliderStatic Trigger ColliderRigidbody Trigger ColliderKinematic Rigidbody Trigger Collider
Static ColliderOui
Rigidbody ColliderOuiOuiOui
Kinematic Rigidbody ColliderOui
Static Trigger Collider
Rigidbody Trigger Collider
Kinematic Rigidbody Trigger Collider
Les messages de déclenchement sont envoyés lors d'une collision
Static ColliderRigidbody ColliderKinematic Rigidbody ColliderStatic Trigger ColliderRigidbody Trigger ColliderKinematic Rigidbody Trigger Collider
Static ColliderOuiOui
Rigidbody ColliderOuiOuiOui
Kinematic Rigidbody ColliderOuiOuiOui
Static Trigger ColliderOuiOuiOuiOui
Rigidbody Trigger ColliderOuiOuiOuiOuiOuiOui
Kinematic Rigidbody Trigger ColliderOuiOuiOuiOuiOuiOui

les réactions

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

Se connecter