Rigidbodies
Joints (Articulaciones)

Colliders

Los componentes Collider definen la forma de un objeto para los propósitos de colisiones físicas. Un collider, el cual es invisible, necesita no estar con la misma forma exacta que el mesh del objeto y de hecho, una aproximación a menudo es más eficiente e indistinguible en el juego.

Los colliders más simples (y menos intensivos al procesador) son los llamados primitive (primitivos) tipos de collider. En 3D, estos son Box Collider, Sphere Collider y Capsule Collider. En 2D, usted puede utilizar el Box Collider 2D y Circle Collider 2D. Cualquier número de estos se pueden agregar a un solo objeto para crear compound colliders (colliders compuestos).

Con un posicionamiento y dimensionamiento adecuado, los colliders compuestos pueden a menudo aproximar la forma de un objeto bastante bien mientras mantiene una sobrecarga al procesador baja. Una mayor flexibilidad se puede ganar al tener colliders adicionales en objetos hijo (eg, las cajas pueden girar relativo a los ejes locales del objeto padre). Cuando cree un collider compuesto así, debería solamente haber un componente Rigidbody colocado en el objeto raíz en la jerarquía.

Tenga en cuenta, que los colliders primitivos no van a funcionar correctamente con shear transforms - esto significa que si usted utiliza una combinación de rotaciones y escalas no uniformes en la jerarquía del transform para que la forma resultante no vaya a coincidir con la forma de la primitiva, el collider primitivo no será capaz de representarla correctamente.

Hay algunos casos, sin embargo, dónde incluso los compound colliders no son lo suficiente precisos. En 3D, usted puede utilizar Mesh Colliders para encajar la figura del mesh del objeto exactamente. En 2D, el Polygon Collider 2D va a generalmente no encajar con la figura del gráfico sprite perfectamente pero usted puede re-definir la figura a cualquier nivel de detalle que quiera. Estos colliders son mucho más intensivos al procesador que los tipos primitivos, no obstante, usted puede utilizarlos de manera escasa para mantener un buen rendimiento. También, un mesh collider va a normalmente ser incapaz de colisionar con otro mesh collider (ie, nada va suceder cuando entren en contacto). Usted puede pasar alrededor de esto en algunos casos al marcar el mesh collider como Convex en el inspector Esto va a generar la figura del collider como un “convex hull” que es como el mesh original pero con cualquier hueco llenado. El beneficio de esto es que un convex mesh collider puede colisionar con cualquier otro mesh colliders entonces usted puede utilizar esta característica cuando usted tenga un personaje moviéndose con figuras adecuadas. Sin embargo, una buena regla general es utilizar mesh colliders para la geometría de escena y aproximar la figura de objetos moviéndose utilizando colliders primitivos compound.

Los colliders pueden ser agregados a un objeto sin un componente Rigidbody para crear pisos, paredes y cualquier otro elemento sin movimiento en la escena. Estos son referenciados como static colliders. En general, usted no debería reposicionar colliders estáticos cambiando la posición del Transform ya que esto va a impactar fuertemente el rendimiento del motor de física. Los Colliders en un objeto que tiene un Rigidbody son conocidos como dynamic colliders. Los Colliders estáticos pueden interactuar con los colliders dinámicos pero debido a que estos no tienen Rigidbody, no se moverán en respuesta a las colisiones.

La página de referencia para los varios tipos de colliders están linkiados arriba para más información acerca de sus propiedades y usos.

Materiales de Física

Cuando los colliders interactúan, sus superficies necesitan simular las propiedades del materia el cual supuestamente representan. Por ejemplo, un pedazo de hielo será resbaloso mientras una bola de caucho va a ofrecer bastante fricción y será de mucho rebote. Aunque la figura de los colliders no es deformada durante las colisiones, su fricción y rebote puede ser configurado utilizando Physics Materials. Obteniendo los parámetros como se debe puede involucrar un poco de intento y error pero un material de hielo, por ejemplo, tendrá cero (o muy poca) fricción y un material de caucho tendrá mucha fricción y casi un perfecto reboto. Vea las páginas de referencia de Physic Material y Physics Material 2D para más detalles en los disponibles parámetros. Tenga en cuenta que por razones históricas, el assset 3D es llamado Physic Material (sin la S) pero el equivalente 2D es llamado Physics Material 2D (con la S).

Triggers

El sistema de scripting puede detectar cuando colisiones suceden e instanciar acciones utilizando la función OnCollisionEnter. Sin embargo, usted puede también utilizar el motor de física simplemente para detectar cuando un collider entra al espacio de otro sin crear una colisión. Un collider configurado como Trigger (utilizando la propiedad Is Trigger) no se comporta como un objeto solido y simplemente le permitirá a otros colliders pasar a través de él. Cuando un collider entra su espacio, un trigger va a llamar la función OnTriggerEnter en los scripts del trigger del objeto.

Las acciones del script tomadas en la colisión

Cuando la colisión ocurre, el motor de física llamada las funciones con nombres específicos en cualquier script adjuntado a los objetos involucrados. Usted puede colocar cualquier código que usted quiera en estas funciones para responder al evento de colisión. Por ejemplo, usted podría reproducir un efecto de sonido que se estrella cuando un carro se choca a un obstáculo.

En la primera actualización de física dónde la colisión es detectada, la función OnCollisionEnter es llamada. Durante las actualizaciones dónde el contacto se mantiene, OnCollisionStay se llama y finalmente OnCollisionExit indica que el contacto se ha roto. Los Trigger colliders llaman a las funciones análogas OnTriggerEnter, OnTriggerStay y OnTriggerExit. Tenga en cuenta que para físicas 2D, hay funciones equivalentes con 2D anexado al nombre, eg, OnCollisionEnter2D. Detalles completos de estas funciones y ejemplos de código pueden ser encontrados en la página de referencia de script para la clase MonoBehaviour.

Con colisiones normales, y no-trigger, hay un detalle adicional y es que al menos uno de los objetos involucrados debe tener un non-kinematic Rigidbody (ie, Is Kinematic se debe apagar). Si ambos objetos son Kinematic Rigidboodies entonces OnCollisionEnter, etc, no será llamado. Con colisiones con trigger, esta restricción no aplica y ambos kinematic y no-kinematic rigidbodies van a realizar una llamada a OnTriggerEnter cuando entren a un trigger collider.

Interacciones del Collider

Los Colliders interactúan con cada uno de manera diferente dependiendo en cómo sus Rigidbody components están configurados. Las tres configuraciones importantes son Static Collider (ie, ningún Rigidbody está adjunto), el Rigidbody Collider y el Kinematic Rigidbody Collider.

Static Collider (Colisionador estático)

Este es un GameObject que tiene un Collider pero sin Rigidbody. Los Static Colliders son utilizados para nivela la geometría la cual siempre se mantiene en su mismo lugar y nunca se mueve. Los objetos Rigidbody entrantes van a colisionar con el static collider pero no lo moverá.

El motor de física asume que los static collider nunca se mueven o cambian y pueden hacer uso de optimizaciones basadas en esta asunción. Consecuentemente, los static colliders debería no ser activados/desactivados, movidos o escaladas durante el juego. Si usted cambia un static collider entonces esto resultará en un re-computación extra interna por el motor de física que va a causar un grave problema en rendimiento. Peor aun, los cambios a veces dejan el collider en un estado indefinido que produce a veces cálculos físicos erroneos. Por ejemplo un raycast contra un static collider alterado puede fallar detectarlo, o detectarlo en una posición aleatoria en el espacio. Adicionalmente, los Rigidbodies que son golpeados por un static collider en movimiento no necesariamente se “despertará” y el static collider no va a aplicar fricción. Por estas razones, solo los colliders que son Rigidibodies deberían ser alterados. Si usted quiere un objeto collider que no sea afectado por rigidbodies entrantes pero todavía moverse desde un script usted debería adjuntar un componente Kinematic Rigidbody a éste.

Rigidbody Collider

Este es un GameObject con un Collider y un no-kinematic Rigidbody normal adjunto. Los Rigidbody colliders son completamente simulados por el motor de física y pueden reaccionar a colisiones y fuerzas aplicadas desde un script. Estos pueden colisionar con otros objetos (incluyendo static colliders) y son la configuración Collider más comúnmente utilizada en juegos que utilizan física.

Kinematic Rigidbody Collider

Este es un GameObject con un Collider y un kinematic Rigidbody adjunto (ie, la propiedad IsKinematic está activada). Usted puede mover un objeto kinematic ridibody desde script modificando su componente Transform pero no responderá a colisiones y fuerzas como un no-kinematic rigidbody. Los Kinematic rigidbodies deberían ser utilizados para colliders que pueden ser movidos o desactivados/activados ocasionalmente pero que de otra manera debería comportarse como static colliders. Un ejemplo de esto es deslizar una puerta que normalmente debería actuar como un obstáculo físico inmovible pero puede se puede abrir cuando sea necesario. Al contrario de un static collider, un rigidoby kinematico en movimiento va a aplicar fricción a otros objetos y “despertará” otros rigidbodies cuando entren en contacto.

Incluso cuando kinematic rigidbody colliders inmovibles tienen diferente comportamiento a static colliders. Por ejemplo, si el collider es configurado como un trigger entonces usted también necesita agregar un rigidbody a él con el fin de que reciba eventos triggers en su script. Si usted no quiere que el trigger caiga bajo de gravedad o de otra manera ser afectado por física entonces usted puede configurar la propiedad IsKinematic en su rigidbody.

Un componente Rigidbody pueden intercambiarse entre comportamiento normal y kinematic en cualquier momento utilizando la propiedad IsKinematic.

Un ejemplo común de esto es el efecto “ragdoll” dónde un personaje normalmente se mueve con animaciones pero es lanzado físicamente por una explosión o una colisión fuerte. Las extremidades del personaje pueden ser cada uno dados su propio componente Rigidbody con IsKinematic activado por defecto. Las extremidades se moverán por lo general por animaciones hasta que IsKinematic se desactive para todas ellas e inmediatamente se comportan como objetos de física. En este punto, una colisión o explosión va a mandar al personaje volando con sus extremidades lanzadas de una manera convincente.

La matriz de acción de colisión

Cuando dos objetos colisionan, hay un número de diferente eventos de script que pueden ocurrir dependiendo en las configuraciones de los rigidbodies de los objetos colisionando’. La tablas a continuación dan detalles de qué funciones de eventos son llamadas basándose en los componentes que están adjuntos a los objetos. Algunas combinación solamente causas uno de los dos objetos a ser afectados por la colisión, pero la regla general es que la física no será aplicada al objeto que no tiene un componente Rigidbody adjunto.

La detección de Colisión ocurre y los mensajes son mandados al momento de colisionar
Static Collider Rigidbody Collider Kinematic Rigidbody Collider Static Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider
Static Collider   Y        
Rigidbody Collider Y Y Y      
Kinematic Rigidbody Collider   Y        
Static Trigger Collider            
Rigidbody Trigger Collider            
Kinematic Rigidbody Trigger Collider            
Los mensajes del trigger son mandas al momento de colisionar
Static Collider Rigidbody Collider Kinematic Rigidbody Collider Static Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider
Static Collider         Y Y
Rigidbody Collider       Y Y Y
Kinematic Rigidbody Collider       Y Y Y
Static Trigger Collider   Y Y   Y Y
Rigidbody Trigger Collider Y Y Y Y Y Y
Kinematic Rigidbody Trigger Collider Y Y Y Y Y Y
Rigidbodies
Joints (Articulaciones)