Un componente Rigidbody 2D coloca un objeto bajo el control del motor de física. Muchos conceptos familiares del componente estándar Rigidbody se transfieren a Rigidbody 2D; las diferencias son que en 2D, los objetos solo pueden moverse en el plano XY y solo pueden rotar en un eje perpendicular a ese plano.
Por lo general, el componente Transform del Editor de Unity define cómo un GameObject (y sus GameObjects hijos) está posicionado, girado y escalado dentro de la Escena. Cuando se cambia, actualizá otros componentes, que pueden actualizar cosas como dónde se renderizan o dónde se colocan los colliders. El motor de física 2D es capaz de mover colliders y hacerlos interactuar entre sí, por lo que se requiere un método para que el motor de física comunique este movimiento de colliders a los componentes Transform. Este movimiento y conexión con los colliders es para lo que sirve un componente Rigidbody 2D.
El componente Rigidbody 2D reemplaza el Transform y lo actualiza a una posición/rotación definida por el Rigidbody 2D. Tenga en cuenta que si bien puede anular el Rigidbody 2D modificando el componente Transform usted mismo (porque Unity expone todas las propiedades de todos los componentes), esto causará problemas como GameObjects que pasen a través de uno u otro, y un movimiento impredecible.
Cualquier componente Collider 2D añadido al mismo GameObject o GameObject hijo está implícitamente unido a ese Rigidbody 2D. Cuando un Collider 2D se une al Rigidbody 2D, se mueve con él. Un Collider 2D nunca debe moverse directamente usando el Transform o cualquier desplazamiento collider; El Rigidbody 2D debe ser movido en su lugar. Esto ofrece el mejor rendimiento y garantiza la correcta detección de colisiones. Los Collider 2D conectados al mismo Rigidbody 2D no chocarán entre sí. Esto significa que puede crear un conjunto de colliders que actúan eficazmente como un solo Collider compuesto, todos en movimiento y girando en sincronía con el Rigidbody 2D.
Al diseñar una escena, usted es libre de usar un Rigidbody 2D predeterminado y empezar a colocar colliders. Estos colliders permiten que otros colliders conectados a diferentes Rigidbody 2Ds choquen entre sí.
Agregar un Rigidbody 2D permite que un sprite se mueva de una manera físicamente convincente mediante la aplicación de fuerzas de la API de scripting. Cuando el componente collider apropiado también se adjunta al GameObject del sprite, se ve afectado por colisiones con otros GameObjects en movimiento. El uso de la física simplifica muchas mecánicas de juego comunes y permite un comportamiento realista con una codificación mínima.
El componente Rigidbody 2D tiene una configuración en la parte superior etiquetada como Body Type. La opción que elija para esto afecta las otras configuraciones disponibles en el componente.
Hay tres opciones para Body Type; cada una define un comportamiento común y fijo. Cualquier Collider 2D unido a un Rigidbody 2D hereda el Body Type del Rigidbody 2D. Las tres opciones son:
La opción que elija define:
Tenga en cuenta que aunque los Rigidbody 2Ds se describen a menudo como colisiones entre sí, son los Collider 2Ds unidos a cada uno de esos cuerpos que colisionan. Los Rigidbody 2D no pueden colisionar entre sí sin colliders.
Cambiar el Body Type de un Rigidbody 2D puede ser un proceso complicado. Cuando un Body Type cambia, varias propiedades internas relacionadas con la masa se vuelven a calcular inmediatamente, y todos los contactos existentes para los Collider 2Ds conectados al Rigidbody 2D deben ser reevaluados durante el próximo FixedUpdate. Dependiendo de cuántos contactos y Collider 2Ds estén unidos al cuerpo, cambiar elBody Type puede causar variaciones en el rendimiento.
Un Dynamic Rigidbody 2D está diseñado para moverse bajo simulación. Tiene todo el conjunto de propiedades disponibles, como la masa finita y el arrastre, y se ve afectado por la gravedad y las fuerzas. Un cuerpo dinámico colisionará con cualquier otro tipo de cuerpo y es el más interactivo de los tipos de cuerpo. Este es el tipo de cuerpo predeterminado para un Rigidbody 2D, porque es el tipo de cuerpo más común para las cosas que necesitan moverse. También es el tipo de cuerpo más costoso en rendimiento, debido a su naturaleza dinámica e interactividad con todo lo que lo rodea. Todas las propiedades un Rididbody2D están disponibles con este tipo de cuerpo.
No use el componente Transform para establecer la posición o la rotación de un Dynamic Rigidbody 2D. La simulación vuelve a colocar un Dynamic Rigidbody 2D de acuerdo con su velocidad; puede cambiar esto directamente a través de fuerzas aplicadas por scripts, o indirectamente a través de colisiones y gravedad.
Property: | Función: |
---|---|
Body Type | Establezca los ajustes del componente del RigidBody 2D, de modo que pueda manipular el comportamiento del movimiento (posición y rotación) y la interacción del Collider 2D. Las opciones son: Dynamic, Kinematic, Static |
Material | Use this to specify a common material for all Collider 2Ds attached to a specific parent Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. A Collider 2D uses the following order of priority to determine which Material setting to use: 1. A Physics Material 2D specified on the Collider 2D itself. 2. A Physics Material 2D specified on the attached Rigidbody 2D. A Physics Material 2D default material specified in the Physics 2D window. Tip: Use this to ensure that all Collider 2Ds attached to the same Static Body Type Rigidbody 2D can all use the same Material. |
Simulated | Habilite Simulated (marque la casilla) si desea que el Rigidbody 2D y cualquier Collider 2D adjunto y Joint 2Ds interactúen con la simulación de física durante el tiempo de ejecución. Si esto está deshabilitado (la casilla no está marcada), estos componentes no interactúan con la simulación. Consulte Rigidbody 2D propiedades: Simulated, a continuación, para obtener más detalles. Esta casilla está marcada por defecto. |
Use Auto Mass | Marque la casilla si desea que un Rigidbody 2D detecte automáticamente la masa del GameObject de su Collider 2D. |
Mass | Define la masa del Rigidbody 2D. Esto está en gris si seleccionó Use Auto Mass. |
Linear Drag | El coeficiente de fricción afectando el movimiento de posición. |
Angular Drag | El coeficiente de fricción afectando el movimiento de rotación. |
Gravity Scale | Defina el grado en que un GameObject se ve afectado por la gravedad. |
Collision Detection | Defina cómo un GameObject “duerme” para ahorrar tiempo del procesador cuando está en reposo. |
Discrete | Cuando configure Collision Detection en Discrete, los GameObjects con Rigidbody 2Ds y Collider 2Ds pueden superponerse o entre sí durante una actualización de física, si se están moviendo lo suficientemente rápido. Los contactos de colisión solo se generan en la nueva posición. |
Continuous | Cuando Collision Detection se establece en Continuous, GameObjects con Rigidbody 2Ds y Collider 2Ds no se atraviesan durante una actualización. En cambio, Unity calcula el primer punto de impacto de cualquiera de los Collider 2D, y mueva el GameObject allí. Tenga en cuenta que esto requiere más tiempo de CPU que Discrete. |
Sleeping Mode | Define cómo el GameObject “duerme” para ahorrar tiempo del procesador cuando está en reposo. |
Never Sleep | Sleeping está desactivado (esto debe evitarse siempre que sea posible, ya que puede afectar los recursos del sistema). |
Start Awake | El GameObject inicialmente está despierto. |
Start Asleep | El GameObject está inicialmente durmiendo pero se puede despertar por colisiones. |
Interpolate | Defina cómo se interpola el movimiento del GameObject entre las actualizaciones de físicas (útil cuando el movimiento tiende a ser desigual). |
None | No se aplica ningún movimiento suavizado. |
Interpolate | El movimiento se suaviza en función de las posiciones de GameObject en cuadros anteriores |
Extrapolate | El movimiento es suavizado basado en una estimación de su posición en el siguiente cuadro (Frame). |
Constraints | Define cualquier restricción en el movimiento del Rigidbody 2D. |
Freeze Position | Detiene el movimiento del Rigidbody 2D en los ejes X e Y del mundo de forma selectiva. |
Freeze Rotation | Detiene el Rigidbody 2D girando alrededor de los ejes Z de forma selectiva. |
Un Kinematic Rigidbody 2D está diseñado para moverse bajo simulación, pero solo bajo un control muy explícito por parte del usuario. Mientras que los Rigidbody 2D Dynamic se ven afectados por la gravedad y las fuerzas, un Rigidbody 2D Kinematic no lo es. Por esta razón, es rápido y tiene una demanda menor de recursos del sistema que un Rigidbody 2D. Dynamic . Los Rigidbody 2D Kinematic están diseñados para ser reubicados explícitamente a través de Rigidbody2D.MovePosition o Rigidbody2D.MoveRotation. Utilice consultas de física para detectar colisiones y scripts para decidir dónde y cómo se moverá el Rigidbody 2D.
Un Rigidbody 2D Kinematic todavía se mueve a través de su velocidad, pero la velocidad no se ve afectada por las fuerzas o la gravedad. Un Rigidbody 2D Kinematic no colisiona con otros Rigidbody 2D Kinematic o con Rigidbody 2Ds Static; solo colisiona con los Rigidbody 2D__Dynamic. Similar a un Rigidbody 2D Static__ (ver más abajo), un Rigidbody 2D Kinematic se comporta como un objeto inamovible (como si tuviera una masa infinita) durante las colisiones. Las propiedades relacionadas con la masa no están disponibles con este tipo de cuerpo.
Property: | Función: |
---|---|
Body Type | Establezca los ajustes del componente del RigidBody 2D, de modo que pueda manipular el comportamiento del movimiento (posición y rotación) y la interacción del Collider 2D. Las opciones son: Dynamic, Kinematic, Static |
Material | Use this to specify a common material for all Collider 2Ds attached to a specific parent Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. A Collider 2D uses the following order of priority to determine which Material setting to use: 1. A Physics Material 2D specified on the Collider 2D itself. 2. A Physics Material 2D specified on the attached Rigidbody 2D. A Physics Material 2D default material specified in the Physics 2D window. TIP: Use this to ensure that all Collider 2Ds attached to the same Static Body Type Rigidbody 2D can all use the same Material. |
Simulated | Habilite Simulated (marque la casilla) si desea que el Rigidbody 2D y cualquier Collider 2D adjunto y Joint 2Ds interactúen con la simulación de física durante el tiempo de ejecución. Si esto está deshabilitado (la casilla no está marcada), estos componentes no interactúan con la simulación. Consulte Rigidbody 2D propiedades: Simulated, a continuación, para obtener más detalles. Esta casilla está marcada por defecto. |
Use Full Kinematic Contacts | Habilite esta configuración (marque la casilla) si desea que los Rigidbody 2D Kinematic colisione con todos los tipos Rigidbody 2D. Esto es similar a un Rigidbody 2D Dynamic, excepto que los Rigidbody 2D Kinematic no se mueve por el motor de física al contactar otro componente Rigidbody 2D; en cambio, actúa como un objeto inmóvil, con masa infinita. Cuando Use Full Kinematic Contacts está desactivado, los Rigidbody 2D Kinematic colisiona con Rigidbody 2D Dynamic . Consulte Propiedades de un Rigidbody 2D: Use Full Kinematic Contacts, a continuación, para obtener más detalles. Esta casilla no está marcada de forma predeterminada. |
Collision Detection | Defina cómo un GameObject “duerme” para ahorrar tiempo del procesador cuando está en reposo. |
Discrete | Cuando configure Collision Detection en Discrete, los GameObjects con Rigidbody 2Ds y Collider 2Ds pueden superponerse o entre sí durante una actualización de física, si se están moviendo lo suficientemente rápido. Los contactos de colisión solo se generan en la nueva posición. |
Continuous | Cuando Collision Detection se establece en Continuous, GameObjects con Rigidbody 2Ds y Collider 2Ds no se atraviesan durante una actualización. En cambio, Unity calcula el primer punto de impacto de cualquiera de los Collider 2D, y mueva el GameObject allí. Tenga en cuenta que esto requiere más tiempo de CPU que Discrete. |
Sleeping Mode | Define cómo el GameObject “duerme” para ahorrar tiempo del procesador cuando está en reposo. |
Never Sleep | Sleeping está desactivado (esto debe evitarse siempre que sea posible, ya que puede afectar los recursos del sistema). |
Start Awake | El GameObject inicialmente está despierto. |
Start Asleep | El GameObject está inicialmente durmiendo pero se puede despertar por colisiones. |
Interpolate | Defina cómo se interpola el movimiento del GameObject entre las actualizaciones de físicas (útil cuando el movimiento tiende a ser desigual). |
None | No se aplica ningún movimiento suavizado. |
Interpolate | El movimiento se suaviza en función de las posiciones de GameObject en cuadros anteriores |
Extrapolate | El movimiento es suavizado basado en una estimación de su posición en el siguiente cuadro (Frame). |
Constraints | Define cualquier restricción en el movimiento del Rigidbody 2D. |
Freeze Position | Detiene el movimiento del Rigidbody 2D en los ejes X y Y del mundo selectivamente |
Freeze Rotation | Para la rotación del Rigidbody 2D alrededor de los ejes Z del mundo selectivamente. |
Un Static Rigidbody 2D está diseñado para no moverse en absoluto en la simulación; si algo colisiona con él, un Static Rigidbody 2D se comporta como un objeto inamovible (como si tuviera una masa infinita). También es el tipo de cuerpo menos intensivo en recursos para usar. Un cuerpo Static solo colisiona con Rigidbody2D Dynamic. Hacer que dos Rigidbody2D Static colisionen no es soportado ya que no están diseñados para moverse.
Solo un conjunto muy limitado de propiedades está disponible para este tipo de cuerpo.
Property: | Función: |
---|---|
Body Type | Establezca los ajustes del componente del RigidBody 2D, de modo que pueda manipular el comportamiento del movimiento (posición y rotación) y la interacción del Collider 2D. Las opciones son: Dynamic, Kinematic, Static |
Material | Use this to specify a common material for all Collider 2Ds attached to a specific parent Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. A Collider 2D uses the following order of priority to determine which Material setting to use: 1. A Physics Material 2D specified on the Collider 2D itself. 2. A Physics Material 2D specified on the attached Rigidbody 2D. A Physics Material 2D default material specified in the Physics 2D window. TIP: Use this to ensure that all Collider 2Ds attached to the same Static Body Type Rigidbody 2D can all use the same Material. |
Simulated | Habilite Simulated (marque la casilla) si desea que el Rigidbody 2D y cualquier Collider 2D adjunto y Joint 2Ds interactúen con la simulación de física durante el tiempo de ejecución. Si esto está deshabilitado (la casilla no está marcada), estos componentes no interactúan con la simulación. Consulte Rigidbody 2D propiedades: Simulated, a continuación, para obtener más detalles. Esta casilla está marcada por defecto. |
Hay dos maneras de marcar un Rigidbody 2D como Static:
Para el GameObject con el componente Collider 2D no tener un componente Rigidbody 2D en absoluto.Todos estos Collider 2Ds son considerados internamente para ser conectados a un solo componente oculto Static Rigidbody2D.
Para que un GameObject tenga un Rigidbody 2D y para que ese Rigidbody 2D se configure en Static.
El Método 1 es una abreviatura para hacer Collider 2Ds Static. Al crear un gran número de Collider 2Ds Static, es más fácil no tener que agregar un Rigidbody 2D para cada GameObject con un Collider 2D.
El Método 2 existe por motivos de rendimiento. Si un Static Collider 2D necesita moverse o reconfigurarse en tiempo de ejecución, es más rápido hacerlo cuando tiene su propio Rigidbody 2D. Si un grupo de Collider 2D necesita ser movido o reconfigurado en el tiempo de ejecución, es más rápido que todos ellos sean hijos de un padre Rigidbody 2D marcado como Static que mover cada GameObjeto individualmente.
Nota: Como se indicó anteriormente, los Rigidbody 2D__Static__ están diseñados para no moverse, y las colisiones entre dos objetos Rigidbody 2D__Static__ que se cruzan no están registrados. Sin embargo, los Rigidbody 2Ds Static y los Rigidbody 2Ds__Kinematic__interactuarán entre sí si uno de sus Colliders 2D está configurado para ser un trigger. También hay una función que cambia con lo que un cuerpo Kinematic interactuará (consulte Use Full Kinematic Contacts a continuación).
Use la propiedad Simulated para detener (sin marcar) y comenzar (marcado) un Rigidbody 2Dy cualquier Collider 2D y Joint 2D adjuntos de interactuar con la simulación de física 2D. Cambiar esta propiedad es mucho más eficiente en cuanto a la memoria y el procesador que la activación o desactivación de los componentes Collider 2D y Joint 2D individuales.
Cuando la casilla Simulated está smarcada, ocurre lo siguiente:
Cuando la casilla Simulated está desmarcada, ocurre lo siguiente:
En la simulación de física en 2D, un componente Rigidbody 2D controla la posición y la rotación de los componentes Collider 2D adjuntos, y permite que los componentes Joint 2D utilicen estas posiciones y rotaciones como puntos de anclaje. Un Collider 2D se mueve cuando el Rigidbody 2D al que está unido se mueve. El Collider 2D luego calcula los contactos con otros Collider 2D conectados a otros Rigidbody 2D. Los Joint 2D también restringen las posiciones y rotaciones de Rigidbody 2D. Todo esto toma tiempo de simulación.
Puede detener y comenzar elementos individuales de la simulación de física en 2D habilitando y deshabilitando componentes individualmente. Puede hacer esto en los componentes Collider 2D y Joint 2D. Sin embargo, habilitar y deshabilitar los elementos individuales de las simulaciones físicas tiene el uso de memoria y los costos de energía del procesador. Cuando los elementos de la simulación están desactivados, el motor de física 2D no produce ningún objeto interno basado en física para simular. Cuando los elementos de la simulación están habilitados, el motor de física 2D tiene objetos internos basados en física para simular. Habilitar y deshabilitar los componentes de simulación de física 2D significa que se deben crear y destruir GameObjects internos y los componentes basados en física; deshabilitar la simulación es más fácil y más eficiente que inhabilitar componentes individuales.
NOTE: When a Rigidbody 2D’s Simulated option is unchecked, any attached Collider 2D is effectively ‘invisible’, that is; it cannot be detected by any physics queries, such as Physics.Raycast.
Habilite esta configuración (marque la casilla de verificación) si desea que los Rigidbody 2D Kinematic colisione con todos los Rigidbody 2D Body Types (tipos de cuerpo) . Esto es similar a los Rigidbody 2D Dynamic, excepto que los Rigidbody 2D Kinematic no es movido por el motor de física al contactar a otro Rigidbody 2D; actúa como un objeto inmóvil, con masa infinita.
When this setting is disabled (unchecked), a Kinematic Rigidbody 2D only collides with Dynamic Rigidbody 2Ds; it does not collide with other Kinematic Rigidbody 2Ds or Static Rigidbody 2Ds (note that trigger colliders are an exception to this rule). This means that no collision scripting callbacks (OnCollisionEnter, OnCollisionStay, OnCollisionExit) occur.
This can be inconvenient when you are using physics queries (such as Physics.Raycast) to detect where and how a Rigidbody 2D should move, and when you require multiple Kinematic Rigidbody 2Ds to interact with each other. Enable Use Full Kinematic Contacts to make Kinematic Rigidbody 2D components interact in this way.
Use Full Kinematic Contacts permite la posición explícita y el control de rotación de un Rigidbody 2D Kinematic, pero aún permite callbacks de colisión completa. En una configuración en la que necesita un control explícito de todos los Rigidbody 2D, utilice Rigidbody 2D, Kinematic en lugar de Rigidbody 2D, Dynamic para tener soporte completo de los callbacks.