Version: 2019.2
Visión general del Rigidbody
Joints (Articulaciones)

Colliders

Collider components define the shape of a GameObject for the purposes of physical collisions. A collider, which is invisible, does not need to be the exact same shape as the GameObject’s mesh. A rough approximation of the mesh is often more efficient and indistinguishable in gameplay.

The simplest (and least processor-intensive) colliders are primitive collider types. In 3D, these are the Box Collider, Sphere Collider and Capsule Collider. In 2D, you can use the Box Collider 2D and Circle Collider 2D. You can add any number of these to a single GameObject to create compound colliders.

Compound colliders

Compound colliders approximate the shape of a GameObject while keeping a low processor overhead. To get further flexibility, you can add additional colliders on child GameObjects. For instance, you can rotate boxes relative to the local axes of the parent GameObject. When you create a compound collider like this, you should only use one Rigidbody component, placed on the root GameObject in the hierarchy.

Primitive colliders do not work correctly with shear transforms. If you use a combination of rotations and non-uniform scales in the Transform hierarchy so that the resulting shape is no longer a primitive shape, the primitive collider cannot represent it correctly.

Mesh colliders

There are some cases, however, where even compound colliders are not accurate enough. In 3D, you can use Mesh Colliders to match the shape of the GameObject’s mesh exactly. In 2D, the Polygon Collider 2D does not match the shape of the sprite graphic perfectly but you can refine the shape to any level of detail you like.

These colliders are much more processor-intensive than primitive types, so use them sparingly to maintain good performance. Also, a mesh collider cannot collide with another mesh collider (i.e., nothing happens when they make contact). You can get around this in some cases by marking the mesh collider as Convex in the Inspector. This generates the collider shape as a “convex hull” which is like the original mesh but with any undercuts filled in.

The benefit of this is that a convex mesh collider can collide with other mesh colliders so you can use this feature when you have a moving character with a suitable shape. However, a good rule is to use mesh colliders for scene geometry and approximate the shape of moving GameObjects using compound primitive colliders.

Static colliders

You can add colliders to a GameObject without a Rigidbody component to create floors, walls and other motionless elements of a Scene. These are referred to as static colliders. You should not reposition static colliders by changing the Transform position because this impacts heavily on the performance of the physics engine. Colliders on a GameObject that has a Rigidbody are known as dynamic colliders. Static colliders can interact with dynamic colliders but since they don’t have a Rigidbody, they do not move in response to collisions.

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.

Collision callbacks for scripts

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
Visión general del Rigidbody
Joints (Articulaciones)