Mesh Collider
Sphere Collider

Rigidbody

Los Rigidbodies le permite a sus GameObjects actuar bajo el control de la física. El Rigidbody puede recibir fuerza y torque para hacer que sus objetos se muevan en una manera realista. Cualquier GameObject debe contener un Rigidbody para ser influenciado por gravedad, actué debajo fuerzas agregadas vía scripting, o interactuar con otros objetos a través del motor de física NVIDIA Physx.

Propiedades

Propiedad: Función:
Mass La masa del objeto (en Kilogramos por defecto).
Drag Qué tanta resistencia al aire afecta el objeto cuando se mueva con fuerzas. 0 significa sin resistencia al aire, e infinidad hace que el objeto pare de moverse inmediatamente.
Angular Drag Qué tanta resistencia al aire afecta el objeto cuando gire desde un torque. 0 significa sin ninguna resistencia al aire. Tenga en cuenta que usted no puede hacer que objeto pare de girar simplemente ajustando su Angular Drag a infinidad.
Use Gravity Si está activado, el objeto es afectado por gravedad.
Is Kinematic Si está activado, el objeto no será manejado por el motor de física, y puede solo ser manipulado por su Transform. Esto es bueno para plataformas que se muevan o si usted quiere animar un Rigidbody que tiene un HingeJoint adjunto.
Interpolate Intente una de las opciones si usted está viendo que los movimientos de su Rigidbody estén sacudidos.
- None Ninguna interpolación es aplicada.
- Interpolate El transform es suavizado básandose en el transform del cuadro previo.
- Extrapolate El transform es suavizado básandose en el transform estimado para el siguiente cuadro.
Collision Detection Utilizado para prevenir que objetos que se estén moviendo rápido pasen a través de otros objetos sin detectar colisiones.
- Discrete Utiliza la detección de colisiones discreta (Discreet collision detection) contra todos los otros colliders en la escena. Otros colliders van a utilizar la detección de colisiones discreta cuando pruebe por colisiones contra ella. Utilizado para colisiones normales (Este es el valor por defecto).
- Continuous Utiliza Discrete collision detection contra dynamic colliders (con un rigidbody) y continuous collision detection contra static MeshColliders (sin un rigidbody). Rigidbodies configurados a Continuous Dynamic utilizarán continuous collision detection cuando pruebe por colisiones contra este rigidbody. Otros rigidbodies utilizarán Discreet Collision detection. Utilizado para objetos los cuales el Continuous Dynamic detection necesita colisionar con. (Esto tiene un gran impacto en el rendimiento de física, déjelo configurado a Discrete, si usted no quiere problemas con colisiones con objetos rápidos)
- Continuous Dynamic Utiliza la detección de colisión continua contra objetos configurados Continuous y Continuous Dynamic Collision. También utilizará la detección de colisión continua contra MeshColliders estáticos (sin un rigidbody). Para los demás otros colliders éste utiliza discreete collision detection. Utilizado para objetos que se estén moviendo rápidos.
Constraints Restricciones en el movimiento del Rigidbody :-
- Freeze Position Detiene al Rigidbody que se mueva en los ejes X, Y y Z del mundo selectivamente.
- Freeze Rotation Detiene que el Rigidbody gire alrededor de los ejes X, Y y Z locales selectivamente.

Detalles

Los Rigidbodies le permite a sus GameObjects actuar bajo el control del motor de física. Esto abre la puerta a colisiones realistas, una variedad de tipos de articulaciones, y otros comportamientos buenos. Manipular sus Gameobjects al agregar fuerza a un Rigidbody crea una sensación diferente y de aspecto que en vez de ajustar el Transform Component directamente. Generalmente, usted no debería manipular el Rigidbody y el Transform del mismo GameObject - solamente uno o el otro.

La diferencia más grande entre manipular el Transform vs el Rigidbody es el uso de fuerzas. Los Rigidbodies pueden recibir fuerzas y torque, pero el Transforms no puede. Los Transform pueden ser trasladados y girados, pero esto no es lo mismo que utilizar física. Usted notará la diferencia clave cuando lo intente usted mismo. Agregando fuerzas/torque al Rigidbody puede cambiar la posición y la rotación del componente Transform del objeto. Esta es la razón por la cual usted debería solamente utilizar una o la otra. Cambiar el Transform mientras utilice física puede causar problemas con colisiones y otros cálculos.

Los Rigidbodies deben ser explícitamente agregados a su GameObject antes de que sean afectados por el motor de física. Usted puede agregar un Rigidbody a su objeto seleccionado desde Components->Physics->Rigidbody en la barra de menú. Ahora su objeto está listo con física; este caerá bajo la gravedad y puede recibir fuerzas via scripting, pero usted pueda que necesite agregar un Collider o Joint para obtener que se comporte como usted quiere.

Crianza

Cuando un objeto está debajo del control de física, este se mueve semi-independientemente de la manera en que el transform de sus padres de mueva. Si usted mueve cualquier padre, estos jalarán el hijo Rigidbody a lo largo con ellos. Sin embargo, el Rigidbodies también se caerán gracias a la gravedad y la reacción a eventos de colisión.

Scripting

Para controlar sus Rigidbodies, usted va a principalmente necesitar utilizar scripts para agregar fuerzas o torque. Usted hace esto llamando AddForce() y AddTorque() en el rigidbody del objeto. Recuerde que usted no debería directamente alterar el transform del objeto cuando usted está utilizando física.

Animación

Para algunas situaciones, principalmente creando efectos de ragdoll, es necesario cambiar el control del objeto entre animaciones y física. Para este propósito los Rigidbodies pueden ser marcados isKinematic. Mientras que el Rigidbody esté marcado isKinematic, este no será afectado por colisiones, fuerzas, o cualquier otra parte del sistema de física. Esto significa que usted va a necesitar controlar los objetos manipulando el componente Transform directamente. Los Rigidbodies Kinematic van a afectar otros objetos, pero ellos mismos no serán afectados por física. Por ejemplo, las Articulaciones (Joints) que estén adjuntos a objetos Kinematic van a restringir otros Rigidbodies adjuntos a ellos y Kinematic Rigidbodies van a afectar otros Rigidbodies a través de colisiones.

Colliders

Los Colliders son otro tipo de componente que debe ser agregado a lo largo del Rigidbody con el fin de permitir que otras colisiones ocurran. Si dos Rigidbodies se chocan entre ellas, el motor de física no va a calcular una colisión al menos que ambos objetos también tengan un Collider adjunto. Los Rigidbodies sin Colliders simplemente pasarán a través de cada uno durante otras simulaciones de física.

Los Colliders definen los limites físicos de un Rigidbody
Los Colliders definen los limites físicos de un Rigidbody

Agregue un Collider con el menú Component->Physics. Mire la página de referencia del Componente de cualquier Collider individual para información más especifica:

Compound Colliders (Colliders Compuestos)

Los Compound Colliders (colliders compuestos) son combinaciones de colliders primitivos, colectivamente actuando como un collider sencillo. Estos son prácticos cuando usted tiene un mesh complejo para utilizar en colisiones pero no pueden utilizar un Mesh Collider. Para crear un Compound Collider, cree objetos hijo de su objeto colisionado, luego agregue un componente collider a cada objeto hijo. Esto le permite a usted posicionar, girar, y escalar cada Collider de manera fácil e independiente uno de otro. Usted puede construir su compound collider de un número de colliders primitivos y/o convex mesh colliders.

Una configuración del mundo real de un Compound Collider

En la foto de arriba, el GameObject Gun Model tiene un Rigidbody adjunto, y múltiplos Colliders primitivos como GameObjects hijos. Cuando el padre Rigidbody es movido alrededor por fuerzas, los colliders hijos se mueve con él. Los Colliders primitivos van a colisionar con el entorno del Mesh Collider, y el Rigidbody del padre va a alterar la manera en que se mueva basándose en las fuerzas siendo aplicadas a él y cómo sus colliders hijos interactuar con otros Colliders en la escena.

Cuando los Mesh Colliders no pueden normalmente colisionar con cada uno. Si un Mesh Collider es marcado como Convex, entonces puede colisionar con otro Mesh Collider. La solución típica es utilizar Colliders primitivos para cualquier objeto que se mueva, y los Mesh Colliders para objetos de fondo estáticos.

Continuous Collision Detection (Detección de Colisión Continúa)

Continuous Collision detection es una característica para prevenir que los colliders que se muevan de manera rápida se pasen entre ellos. Esto puede suceder cuando utilice la normal (Discrete) collision detection, cuando un objeto es un lado de un collider en un cuadro, y ya paso el collider en el siguiente cuadro. Para resolver esto, usted puede activar continuous collision detection en el rigidbody del objeto que se está moviendo rápido. Configure el modo de collision detection a Continuous para prevenir que el rigidbody pase a través de cualquier (ie, no rigidbody) MeshCollider estático. Configurelo a Continuous Dynamic para prevenir que el rigidbody pase a tráves de cualquier otro rigidbody soportado con collision detection mode establecido a Continuous o _Continuous Dynamic. Continuous collision detection es soportado para Box-, Sphere- y CapsuleColliders. Tenga en cuenta que continuous collision detection está intencionado como una red de seguridad para atrapar colisiones en casos dónde los objetos de otro modo pasaría a través de ellos, pero no va a entregar resultados colisiones de física precisos, por lo que usted podría seguir considerando disminuir el valor de fixed time step en el inspector del TimeManager para hacer la simulación más precisa,si usted corre en problemas con objetos que se está moviendo rápido.

Utilice el tamaño correcto

El tamaño del mesh de su GameObject es mucho más importante que la masa de su Rigidbody. Si usted encuentra que su Rigidbody no se está comportando como usted espera - se mueve lento, levita, o no colisionar correctamente - considere ajustar la escala de su mesh asset. La escala predeterminada de unidades de Unity es 1 unidad = 1 metro, entonces la escala de su mesh importado se mantiene, y aplicado a los cálculos de física. Por ejemplo, , un rascacielos en ruinas que se va a caer es muy diferente que una torre hecha de bloques de juguete, entonces los objetos de diferentes tamaños deberían ser modelados a una escala precisa.

Si usted está modelando un humano asegures de que sea 2 metros alto en Unity. Para revisar si su objeto tiene el tamaño correcto comparado al cubo predeterminado. Usted puede crear un cubo utilizando GameObject > 3D Object > Cube. La altura del cubo será exactamente 1 metro, por lo que su humano debería ser dos veces así de grande.

Si usted no es capaz de ajustar el mesh por sí mismo, usted puede cambiar la escala uniforme de un mesh asset en particular seleccionándolo en el Project View y escogiendo Assets->Import Settings… del menú. Aquí, usted puede cambiar la escala y re-importar su mesh.

Si su juego requiere que su GameObject necesite ser instancia en diferentes escalas, está bien ajustar los valores de los ejes de escala del transform. Lo malo es que la simulación de física debe hacer más trabajo en el tiempo en el que el objeto es instancia, y puede causar un decrecimiento de rendimiento en su juego. Esto no es una perdida terrible, pero no es tan eficiente como finalizar su escala con las otras dos opciones. También tenga en cuenta que las escalas no-uniformes puede crear comportamientos no deseados cuando la Crianza es utilizada. Por estas razones siempre es optimo crear su objeto en la escala correcta en la aplicación de su modelado.

Consejos

  • La Mass relativa de dos Rigidbodies determina cómo reaccionan cuando colisionan uno con el otro.
  • Hacer que un Rigidbody tenga mayor Mass que otro no hace que se caigan más rápido en caída libre. Utilice Drag para eso.
  • Un valor Drag bajo hace que un objeto parezca pesado. Uno alto hace que se parezca liviano. Los valores típicos para un Drag están entre .001 (un bloque solido de metal) y 10 (pluma).
  • Si usted está directamente manipulando el componente Transform de su objeto pero todavía quiere físicas, adjunte un Rigidbody y asegurese de que sea Kinematic.
  • Si usted está moviendo un Gameobject a través de su componente Transform pero usted quiere recibir mensajes de Colisión/Trigger, usted debe adjuntar un Rigidbody al objeto el cual se está moviendo.
  • Usted no puede hacer que un objeto detenga su rotación simplemente ajustando su Angular Drag a infinito.
Mesh Collider
Sphere Collider