les Rigidbody 2D

Un composant Rigidbody 2D place un objet sous le contrôle du moteur physique. De nombreux concepts connus du composant Rigidbody standard sont transférés à un Rigidbody 2D; les différences sont qu'en 2D, les objets ne peuvent se déplacer que dans le plan XY et ne peuvent que pivoter sur un axe perpendiculaire à ce plan.

le composant 2D Rigidbody. Cela apparaît différemment dans l'éditeur Unity selon le type de corps sélectionné.
Le composant 2D Rigidbody. Cela apparaît différemment dans l'éditeur Unity selon le type de corps sélectionné.

Comment fonctionne un Rigidbody 2D

Généralement, le composant Transform de l'éditeur Unity définit comment un objet GameObject (et ses enfants GameObjects) est positionné, pivoté et redimensionné dans la scène. Lorsqu'il est modifié, il met à jour d'autres composants, ce qui peut mettre à jour des éléments tels que leur rendu ou l'emplacement des colliders. Le moteur physique 2D est capable de déplacer les colliders et de les faire interagir les uns avec les autres. Une méthode est donc nécessaire pour que le moteur physique communique ce mouvement des colliders aux composants Transform. Ce mouvement et cette connexion avec les colliders est la raison d'être d'un composant Rigidbody 2D.

Le composant Rigidbody 2D remplace la transformation et la met à jour à une position / rotation définie par le Rigidbody 2D. Notez que, même si vous pouvez toujours modifier le composant Rigidbody 2D en modifiant vous-même le composant Transform (car Unity expose toutes les propriétés de tous les composants), cela entraînera des problèmes tels que le passage ou l’intrusion de GameObjects et des mouvements imprévisibles.

Tout composant Collider 2D ajouté au même GameObject ou enfant GameObject est implicitement attaché à ce Rigidbody 2D. Lorsqu'un Collider 2D est attaché au Rigidbody 2D, il se déplace avec lui. Un Collider 2D ne doit jamais être déplacé directement à l'aide de la transformation ou d'un décalage de collider; le Rigidbody 2D devrait être déplacé à la place. Cela offre de meilleures performances et garantit une détection correcte des collisions. Les Collider 2D attachés au même Rigidbody 2D ne seront pas en collision les uns avec les autres. Cela signifie que vous pouvez créer un ensemble de colliders qui agissent efficacement en tant que collider composé unique, tous en mouvement et en rotation en synchronisation avec le Rigidbody 2D.

Lors de la conception d'une scène, vous êtes libre d'utiliser un Rigidbody 2D par défaut et de commencer à attacher des colliders. Ces colliders permettent aux autres colliders attachés à différents Rigidbody 2D de se heurter.

Conseil

L'ajout d'un Rigidbody 2D permet à un sprite de se déplacer d'une manière convaincante en appliquant des forces à partir du Scripting API. Lorsque le composant du collider approprié est également associé au sprite, il est affecté par des collisions avec d'autres GameObjects en mouvement. L'utilisation de la physique simplifie de nombreux mécanismes de jeu courants et permet un comportement réaliste avec un codage minimal.

Type de Corps

Le composant Rigidbody 2D a un paramètre en haut libellé Body Type (Type de corps). L'option que vous choisissez pour cela affecte les autres paramètres disponibles sur le composant.

le paramètre Body Type sur un composant Rigidbody 2D
Le paramètre Body Type sur un composant Rigidbody 2D.

Il existe trois options pour le type de corps; chacun définit un comportement commun et fixe. Tout Collider 2D attaché à un Rigidbody 2D hérite du type de corps du Rigidbody 2D.

Les trois options sont les suivantes :

  • Dynamic
  • Kinematic
  • Static

L'option que vous choisissez définit :

  • Comportement du mouvement (position et rotation)
  • Interaction du collider

Notez que bien que les Rigidbody 2D soient souvent décrits comme entrant en collision les uns avec les autres, ce sont les Collider 2D attachés à chacun de ces corps qui entrent en collision. Un Rigidbody 2D ne peut pas entrer en collision sans collider.

Changer le type de corps d'un Rigidbody 2D peut être un processus délicat. Lorsqu'un type de corps change, diverses propriétés internes liées à la masse sont immédiatement recalculées et tous les contacts existants pour les Collider 2D attachés au Rigidbody 2D doivent être réévalués lors de la prochaine FixedUpdate du GameObject. Selon le nombre de contacts et de Collider 2D associés au corps, la modification du type de corps peut entraîner des variations de performances.

Body Type: Dynamic

un Dynamic Rigidbody 2D est conçu pour se déplacer sous simulation.
Un Dynamic Rigidbody 2D est conçu pour se déplacer sous simulation.

Il possède l'ensemble des propriétés disponibles, telles que la masse finie et la traînée, et est affecté par la gravité et les forces. Un corps dynamique se heurtera à tous les autres types de corps et sera le type de corps le plus interactif. C'est le type de corps par défaut pour un Rigidbody 2D, car c'est le type de corps le plus courant pour les éléments qui doivent bouger. C'est aussi le type de corps le plus performant en raison de sa nature dynamique et de son interactivité avec tout ce qui l'entoure. Toutes les propriétés Rigidbody 2D sont disponibles avec ce type de corps.

N'utilisez pas le composant Transform pour définir la position ou la rotation d'un Dynamic Rigidbody 2D. La simulation repositionne un Dynamic Rigidbody 2D en fonction de sa vitesse; vous pouvez changer cela directement via des forces qui lui sont appliquées par des scripts, ou indirectement via des collisions et la gravité.

PropriétéFonction
Body TypeDéfinissez les paramètres du composant RigidBody 2D afin de pouvoir manipuler le comportement du mouvement (position et rotation) et de l’interaction avec un Collider 2D. Les options sont : Dynamic, Kinematic, Static
MaterialUtilisez cette option pour spécifier un matériau commun à tous les Collider 2D associés à un Rigidbody 2D parent spécifique. Remarque : un Collider 2D utilise sa propre propriété Material s'il en a un. S'il n'y a pas de matériau spécifié ici ou dans le Collider 2D, l'option par défaut est None (matériau physique 2D).
Un Collider 2D utilise l'ordre de priorité suivant pour déterminer le paramètre de matériau à utiliser :
  • Un matériau physique 2D spécifié sur le Collider 2D lui-même.
  • Un matériau physique 2D spécifié sur le Rigidbody 2D attaché.
SimulatedActivez Simulated (cochez la case) si vous souhaitez que le Rigidbody 2D et les éventuels Collider 2D et Joint 2D associés interagissent avec la simulation physique pendant l'exécution. Si cette option est désactivée (la case n'est pas cochée), ces composants n'interagissent pas avec la simulation.
Use Auto MassCochez la case si vous voulez que le Rigidbody 2D détecte automatiquement la masse du GameObject à partir de son Collider 2D.
MassDéfini la masse du Rigidbody 2D. Ceci est grisé si vous avez sélectionné Use Auto Mass.
Linear DragCoefficient de glissement affectant le mouvement de position.
Angular DragCoefficient de glissement affectant le mouvement de rotation.
Gravity ScaleDéfini le degré auquel la GameObject est affectée par la gravité.
Collision DetectionDéfini comment les collisions entre Collider 2D sont détectées.
DiscreteLorsque vous définissez la détection de collision sur Discrete, les GameObjects avec Rigidbody 2D et Collider 2D peuvent se chevaucher ou se traverser lors d'une mise à jour physique, s'ils se déplacent assez rapidement. Les contacts de collision ne sont générés qu'à la nouvelle position.
ContinuousLorsque la détection de collision est définie sur Continuous, les GameObjects avec Rigidbody 2D et Collider 2D ne se croisent pas lors d'une mise à jour. Au lieu de cela, Unity calcule le premier point d'impact de n'importe lequel des Collider 2D, et y déplace le GameObject. Notez que cela prend plus de temps CPU que Discrete.
Sleeping ModeDéfini comment le GameObject "dort" pour économiser du temps processeur lorsqu'il est au repos.
Never SleepLe mode veille est désactivé (cela doit être évité dans la mesure du possible, car il peut affecter les ressources du système).
Start AwakeGameObject est initialisé au Awake.
Start AsleepGameObject est initialement endormi mais peut être réveillé par des collisions.
InterpolateDéfini comment le mouvement de GameObject est interpolé entre les mises à jour physiques (utile lorsque le mouvement a tendance à être saccadé).
NoneAucun mouvement de lissage n'est appliqué.
InterpolateLes mouvements sont lissés en fonction des positions de GameObject dans les images précédentes.
ExtrapolateLe mouvement est lissé en fonction d'une estimation de sa position dans l'image suivante.
ConstraintsDéfini les éventuelles restrictions sur le mouvement du Rigidbody 2D.
Freeze PositionBloque le Rigidbody 2D dans les axes X et Y du monde de manière sélective.
Freeze RotationBloque le Rigidbody 2D tournant autour des axes Z de manière sélective.

Body Type: Kinematic

un Kinematic Rigidbody 2D est conçu pour se déplacer sous simulation, mais uniquement sous un contrôle utilisateur très explicite.
Un Kinematic Rigidbody 2D est conçu pour se déplacer sous simulation, mais uniquement sous un contrôle utilisateur très explicite..

Alors qu'un Dynamic Rigidbody 2D est affecté par la gravité et les forces, un Kinematic Rigidbody 2D ne l'est pas. Pour cette raison, il est rapide et demande moins de ressources système qu'un Dynamic Rigidbody 2D. Kinematic Rigidbody 2D est conçu pour être repositionné explicitement via Rigidbody2D.MovePosition ou Rigidbody2D.MoveRotation. Utilisez des requêtes physiques pour détecter les collisions et des scripts pour décider où et comment le Rigidbody 2D doit se déplacer.

Un Kinematic Rigidbody 2D se déplace toujours par sa vitesse, mais la vitesse n’est pas affectée par les forces ou la gravité. Un Kinematic Rigidbody 2D n'entre pas en collision avec d'autres Kinematic Rigidbody 2D ou avec des Statid Rigidbody 2D; il n'entre en collision qu'avec les Dynamic Rigidbody 2D. Semblable à un Rigidbody 2D statique (voir ci-dessous), un Kinematic Rigidbody 2D se comporte comme un objet inamovible (comme s'il avait une masse infinie) lors de collisions. Les propriétés liées à la masse ne sont pas disponibles avec ce type de corps.

PropriétéFonction
Body TypeDéfinissez les paramètres du composant RigidBody 2D afin de pouvoir manipuler le comportement du mouvement (position et rotation) et de l’interaction avec un Collider 2D. Les options sont : Dynamic, Kinematic, Static
MaterialUtilisez cette option pour spécifier un matériau commun à tous les Collider 2D associés à un Rigidbody 2D parent spécifique. Remarque : un Collider 2D utilise sa propre propriété Material s'il en a un. S'il n'y a pas de matériau spécifié ici ou dans le Collider 2D, l'option par défaut est None (matériau physique 2D).
Un Collider 2D utilise l'ordre de priorité suivant pour déterminer le paramètre de matériau à utiliser :
  • Un matériau physique 2D spécifié sur le Collider 2D lui-même.
  • Un matériau physique 2D spécifié sur le Rigidbody 2D attaché.
SimulatedActivez Simulated (cochez la case) si vous souhaitez que le Rigidbody 2D et les éventuels Collider 2D et Joint 2D associés interagissent avec la simulation physique pendant l'exécution. Si cette option est désactivée (la case n'est pas cochée), ces composants n'interagissent pas avec la simulation.
Use Full Kinematic ContactsActivez ce paramètre (cochez la case) si vous souhaitez que le Kinematic Rigidbody 2D entre en collision avec tous les types de corps Rigidbody 2D.
Collision DetectionDéfini comment les collisions entre Collider 2D sont détectées.
DiscreteLorsque vous définissez la détection de collision sur Discrete, les GameObjects avec Rigidbody 2D et Collider 2D peuvent se chevaucher ou se traverser lors d'une mise à jour physique, s'ils se déplacent assez rapidement. Les contacts de collision ne sont générés qu'à la nouvelle position.
ContinuousLorsque la détection de collision est définie sur Continuous, les GameObjects avec Rigidbody 2D et Collider 2D ne se croisent pas lors d'une mise à jour. Au lieu de cela, Unity calcule le premier point d'impact de n'importe lequel des Collider 2D, et y déplace le GameObject. Notez que cela prend plus de temps CPU que Discrete.
Sleeping ModeDéfini comment le GameObject "dort" pour économiser du temps processeur lorsqu'il est au repos.
Never SleepLe mode veille est désactivé (cela doit être évité dans la mesure du possible, car il peut affecter les ressources du système).
Start AwakeGameObject est initialisé au Awake.
Start AsleepGameObject est initialement endormi mais peut être réveillé par des collisions.
InterpolateDéfini comment le mouvement de GameObject est interpolé entre les mises à jour physiques (utile lorsque le mouvement a tendance à être saccadé).
NoneAucun mouvement de lissage n'est appliqué.
InterpolateLes mouvements sont lissés en fonction des positions de GameObject dans les images précédentes.
ExtrapolateLe mouvement est lissé en fonction d'une estimation de sa position dans l'image suivante.
ConstraintsDéfini les éventuelles restrictions sur le mouvement du Rigidbody 2D.
Freeze PositionBloque le Rigidbody 2D dans les axes X et Y du monde de manière sélective.
Freeze RotationBloque le Rigidbody 2D tournant autour des axes Z de manière sélective.

Body Type: Static

un Rigidbody 2D statique est conçu pour ne pas bouger du tout en simulation
Un Rigidbody 2D statique est conçu pour ne pas bouger du tout en simulation.

Un Rigidbody 2D statique est conçu pour ne pas bouger du tout en simulation, si quelque chose entre en collision avec un objet Rigidbody 2D statique, il se comporte comme un objet immobile (comme s'il avait une masse infinie). C'est aussi le type de corps le moins gourmand en ressources à utiliser. Un corps statique n'entre en collision qu'avec les Dynamic Rigidbody 2D. Avoir deux Static Rigidbody 2D en collision n'est pas pris en charge, car ils ne sont pas conçus pour se déplacer. Seul un ensemble très limité de propriétés est disponible pour ce type de corps.

PropriétéFonction
Body TypeDéfinissez les paramètres du composant RigidBody 2D afin de pouvoir manipuler le comportement du mouvement (position et rotation) et de l’interaction avec un Collider 2D. Les options sont : Dynamic, Kinematic, Static
MaterialUtilisez cette option pour spécifier un matériau commun à tous les Collider 2D associés à un Rigidbody 2D parent spécifique. Remarque : un Collider 2D utilise sa propre propriété Material s'il en a un. S'il n'y a pas de matériau spécifié ici ou dans le Collider 2D, l'option par défaut est None (matériau physique 2D).
Un Collider 2D utilise l'ordre de priorité suivant pour déterminer le paramètre de matériau à utiliser :
  • Un matériau physique 2D spécifié sur le Collider 2D lui-même.
  • Un matériau physique 2D spécifié sur le Rigidbody 2D attaché.
SimulatedActivez Simulated (cochez la case) si vous souhaitez que le Rigidbody 2D et les éventuels Collider 2D et Joint 2D associés interagissent avec la simulation physique pendant l'exécution. Si cette option est désactivée (la case n'est pas cochée), ces composants n'interagissent pas avec la simulation.

Il existe deux manières de marquer un Rigidbody 2D comme étant statique :

  • Que le GameObject avec le composant Collider 2D, n'est pas de composant Rigidbody 2D. Tous ces Collider 2D sont considérés comme étant attachés à un seul composant Static Rigidbody 2D caché.
  • Que le GameObject ait un Rigidbody 2D et que le Rigidbody 2D soit réglé sur Static.

La méthode 1 est un raccourci pour créer des Static Collider 2D. Lors de la création d'un grand nombre de Static Collider 2D, il est plus facile de ne pas avoir à ajouter un Rigidbody 2D pour chaque GameObject avec un Collider 2D.

La méthode 2 existe pour des raisons de performances. Si un Static Collider 2D doit être déplacé ou reconfiguré au moment de l'exécution, il est plus rapide de le faire lorsqu'il dispose de son propre Rigidbody 2D. Si un groupe de Collider 2D doit être déplacé ou reconfiguré au moment de l'exécution, il est plus rapide que tous soient des enfants d'un Rigidbody 2D parent marqué comme statique plutôt que de déplacer chaque GameObject individuellement.

Remarque: comme indiqué ci-dessus, les éléments Static Rigidbody 2D sont conçus pour ne pas bouger, et les collisions entre deux objets Static Rigidbody 2D qui se croisent ne sont pas enregistrés. Cependant, les Static Rigidbody 2D et les Kinematic Rigidbody 2D interagiront entre eux si l’un de leurs Collider 2D est défini comme un trigger.

Propriétés du Rigidbody 2D

Simulated

Utilisez la propriété Simulated pour arrêter (décocher) et démarrer (coché) un Rigidbody 2D et tous les Collisionneur 2D et Joint 2D associés en interagissant avec la simulation physique 2D. La modification de cette propriété est beaucoup plus efficace en termes de mémoire et de processeur que l'activation ou la désactivation de composants individuels du Collider 2D et du Joint 2D.

Lorsque la case Simulated est cochée, les événements suivants se produisent :

  • Le Rigidbody 2D se déplace via la simulation (les forces de gravité et de physique sont appliquées).
  • Tout Collider 2D attaché continue à créer de nouveaux contacts et réévalue continuellement les contacts.
  • Tous les Joint 2D attachés sont simulés et contraignent le Rigidbody 2D attaché.
  • Tous les objets de physique internes pour le Rigidbody 2D, le Collider 2D & le Joint 2D restent en mémoire.

Lorsque la case Simulated est décochée, les événements suivants se produisent :

  • Le Rigidbody 2D n'est pas déplacé par la simulation (les forces de gravité et de physique ne sont pas appliquées).
  • Le Rigidbody 2D ne crée pas de nouveaux contacts et tous les contacts attachés au Collider 2D sont détruits.
  • Les Joint 2D attachés ne sont pas simulés et ne contraignent pas le Rigidbody 2D attaché.
  • Tous les objets de physique internes pour le Rigidbody 2D, le Collider 2D et le Joint 2D sont laissés en mémoire.

Pourquoi la désactivation de la simulation est-elle plus efficace que les contrôles de composants individuels?

Dans la simulation physique 2D, un composant Rigidbody 2D contrôle la position et la rotation des composants Collider 2D et permet aux composants Joint 2D d'utiliser ces positions et rotations comme points d'ancrage. Un Collider 2D se déplace lorsque le Rigidbody 2D est attaché à des mouvements. Le Collider 2D calcule ensuite les contacts avec d’autres Collider 2D attachés à d’autres Rigidbody 2D. Les Joint 2D contraignent également les positions et les rotations du Rigidbody 2D. Tout cela prend du temps de simulation.

Vous pouvez arrêter et démarrer des éléments individuels de la simulation physique 2D en activant et en désactivant les composants individuellement. Vous pouvez le faire sur les composants Collider 2D et Joint 2D. Cependant, l'activation et la désactivation d'éléments individuels des simulations physiques entraînent une utilisation de la mémoire et des coûts d'alimentation du processeur. Lorsque des éléments de la simulation sont désactivés, le moteur physique 2D ne génère aucun objet physique interne à simuler. Lorsque des éléments de la simulation sont activés, le moteur physique 2D dispose d’objets internes basés sur la physique à simuler. L'activation et la désactivation des composants de simulation physique 2D signifient que les composants internes des GameObjects et de physique doivent être créés et détruits; La désactivation de la simulation est plus simple et plus efficace que la désactivation de composants individuels.

Utiliser Full Kinematic Contacts

Activez ce paramètre (cochez la case) si vous souhaitez que le Kinematic Rigidbody 2D entre en collision avec tous les types de corps Rigidbody 2D. Ceci est similaire à un Dynamic Rigidbody 2D, sauf que le Kinematic Rigidbody 2D n'est pas déplacé par le moteur physique lorsqu'il contacte un autre Rigidbody 2D; il agit comme un objet immuable, avec une masse infinie.

Lorsque ce paramètre est désactivé (non coché), un Kinematic Rigidbody 2D n'entre en collision qu'avec les Dynamic Rigidbody 2D; il n'entre pas en collision avec d'autres Kinematic Rigidbody 2D ou Static Rigidbody 2D (notez que les colliders de déclenchement sont une exception à cette règle). Cela signifie qu'aucun rappel de script de collision (OnCollisionEnter, OnCollisionStay, OnCollisionExit) ne se produit.

Cela peut être gênant lorsque vous utilisez des requêtes de physique (telles que Physics.Raycast) pour détecter où et comment un Rigidbody 2D doit se déplacer, et lorsque vous avez besoin de plusieurs Kinematic Rigidbody 2D pour interagir les uns avec les autres. Dans une configuration où vous avez besoin d'un contrôle explicite de tous les Rigidbody 2D, utilisez les 2D Kinematic Rigidbody à la place des Dynamic Rigidbody 2D pour toujours disposer d'un support complet de rappel de collision.

les réactions

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

Se connecter