Version: 2018.1
Physics Reference 2D
Collider 2D

Rigidbody 2D

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.

El componente Rigidbody 2D. Esto aparece de manera diferente en el Editor de Unity dependiendo de qué Body Type (tipo de cuerpo) haya seleccionado. Consulte Body Type, a continuación, para obtener más información.
El componente Rigidbody 2D. Esto aparece de manera diferente en el Editor de Unity dependiendo de qué Body Type (tipo de cuerpo) haya seleccionado. Consulte Body Type, a continuación, para obtener más información.

Cómo funciona un Rigidbody 2D

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í.

Consejo

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.

Body Type (tipo de cuerpo)

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:

  • Dynamic
  • Kinematic
  • Static

La opción que elija define:

  • Comportamiento de movimiento (posición y rotación)
  • Interacción con el Collider

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.

Body Type: Dynamic

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 esto para especificar un material común para todos los Collider 2Ds adjuntos a un padre principal específico Rigidbody2D.
Nota: Un Collider 2D usa su propia propiedad Material si tiene una configurada. Si no se especifica ningún material aquí o en un Collider 2D, la opción predeterminada es None (Physics Material 2D). Utiliza un material predeterminado que puede establecer en la ventana Physics 2D Settings.
Un Collider 2D usa el siguiente orden de prioridad para determinar qué configuración de Material usar:
1. Un Physics Material 2D especificado en el Collider 2D en sí.
2. Un Physics Material 2D especificado en el Rigidbody 2D adjunto.
Un Physics Material 2D especificado en Physics 2D Settings.
**CONSEJO: ** Úselo para asegurarse de que todos los Collider 2D conectados al mismo Rigidbody 2D Static Body Type puedan usar el mismo 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.

Body Type: Kinematic

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 esto para especificar un material común para todos los Collider 2Ds adjuntos a un padre principal específico Rigidbody2D.
Nota: Un Collider 2D usa su propia propiedad Material si tiene una configurada. Si no se especifica ningún material aquí o en un Collider 2D, la opción predeterminada es None (Physics Material 2D). Utiliza un material predeterminado que puede establecer en la ventana Physics 2D Settings.
Un Collider 2D usa el siguiente orden de prioridad para determinar qué configuración de Material usar:
1. Un Physics Material 2D especificado en el Collider 2D en sí.
2. Un Physics Material 2D especificado en el Rigidbody 2D adjunto.
Un Physics Material 2D especificado en Physics 2D Settings.
**CONSEJO: ** Úselo para asegurarse de que todos los Collider 2D conectados al mismo Rigidbody 2D Static Body Type puedan usar el mismo 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.

Body Type: Static

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 esto para especificar un material común para todos los Collider 2Ds adjuntos a un padre principal específico Rigidbody2D.
Nota: Un Collider 2D usa su propia propiedad Material si tiene una configurada. Si no se especifica ningún material aquí o en un Collider 2D, la opción predeterminada es None (Physics Material 2D). Utiliza un material predeterminado que puede establecer en la ventana Physics 2D Settings.
Un Collider 2D usa el siguiente orden de prioridad para determinar qué configuración de Material usar:
1. Un Physics Material 2D especificado en el Collider 2D en sí.
2. Un Physics Material 2D especificado en el Rigidbody 2D adjunto.
Un Physics Material 2D especificado en Physics 2D Settings.
**CONSEJO: ** Úselo para asegurarse de que todos los Collider 2D conectados al mismo Rigidbody 2D Static Body Type puedan usar el mismo 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:

  1. 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.

  2. 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).

Propiedades de un Rigidbody 2D

Simulated

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:

  • El Rigidbody 2D se mueve a través de la simulación (se aplican fuerzas de físicas y de gravedad)
  • Cualquier Collider 2D adjunto continúa creando nuevos contactos y reevaluando continuamente los contactos
  • Cualquier Joint 2D adjunto se simula y restringe el Rigidbody 2D
  • Todos los objetos de física interna para Rigidbody 2D, Collider 2D y Joint 2D permanecen en la memoria

Cuando la casilla Simulated está desmarcada, ocurre lo siguiente:

  • El Rigidbody 2D no se mueve con la simulación (las fuerzas de gravedad y físicas no se aplican)
  • El Rigidbody 2D no crea nuevos contactos, y cualquier contacto Collider 2D adjunto se destruye
  • Cualquier Joint 2D no se simula, y no restringe ningún Rigidbody 2D adjunto.
  • Todos los objetos de física interna para Rigidbody 2D, Collider 2D y Joint 2D quedan en la memoria

Por qué desactivar Simulated es más eficiente que los controles de componentes individuales?

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.

NOTA: Cuando la opción Simulated de un Rigidbody está desmarcada, cualquier Collider 2D adjunto es efectivamente ‘invisible’, es decir; no puede ser detectado por ninguna consulta de física, comoPhysics.Raycast.

Use Full Kinematic Contacts

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.

Cuando esta configuración está desactivada (sin marcar), un Rigidbody 2D Kinematic colisiona con un Rigidbody 2D Dynamic; no colisiona con otros Rigidbody 2D Kinematic o Rigidbody 2D Static (tenga en cuenta que los trigger colliders son una excepción a esta regla). Esto significa que no se producen callbacks de scripts de colisión (OnCollisionEnter, OnCollisionStay, OnCollisionExit).

Esto puede ser un inconveniente cuando se utilizan consultas de física (como Physics.Raycast) para detectar dónde y cómo se debe mover un Rigidbody 2D, y cuando se requieren varios Rigidbody 2D Kinematic para interactuar con el uno al otro. Habilite Use Full Kinematic Contacts para hacer que los componentes Rigidbody 2D Kinematic interactúen de esta manera.

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.

Physics Reference 2D
Collider 2D