contacto[arroba]digitallearning.es

Físicas en Unity 3D: Asistente Ragdoll

Post Series: Conociendo Unity3D (VI)

Continuamos con la implementación de físicas en personajes y objetos de un videojuego en Unity 3D describiendo el asistente Ragdoll. Haremos primero una breve introducción de esta funcionalidad, mostrando en un pequeño video el efecto que produce, para luego continuar con la descripción de su implementación.

Descripción de Asistente Ragdoll

El asistente Ragdoll nos permite simular de manera más realista un cuerpo inerte (modelo de personaje humanoide) cayendo al suelo de la escena, sin necesidad de tener que construir una animación que represente dicha acción. Nos facilita por tanto la interacción de nuestro personaje con el medio que le rodea, aplicando físicas y restricciones a las diferentes partes de ese modelo (pelvis, hombros, manos, brazos, dedos etc.) dotándola a cada una de su propia respuesta ante físicas de dicho medio.

Antes de pasar a describir la implementación del asistente Ragdoll, podemos hacernos una idea de este efecto en el siguiente video:

Implementación Asistente Ragdoll

Se comenzará en primer lugar por seleccionar el asistente Ragdoll a través del menú GameObject > 3D Object > Ragdoll…

Menu Ragdoll

Se mostrará la siguiente ventana donde se podrán establecer las referencias a las distintas partes de modelo humanoide:

Wizard Ragdoll

Para mayor claridad, se mostrará el proceso completo a partir del recurso «Raw Mocap Data», que nos proporciona un humanoide a modo de prototipo, y que podrá descargarse gratis desde la asset store de Unity: https://www.assetstore.unity3d.com/en/#!/content/5330

Humanoide Raw Mocap Data

Una vez se ha descargado y añadido a la escena el humanoide, se deberán establecer las referencias de las partes del modelo al asistente Ragdoll, arrastrando y soltando cada uno de los objetos desde la ventana «Hierarchy». Desde el propio asistente se recomienda que el modelo esté en posición de T (de pié y brazos abiertos), y que los ejes estén en la dirección correcta.

Además de las referencias a las diferentes partes del modelo establecidas, deberán indicarse una serie de valores para las propiedades Total Mass (masa a repartir entre todos los huesos del modelo, que el propio asistente se encargará de aplicar de manera lógica), Strength (resistencia del modelo) y Flip Forward (si se activa se basculará el personaje hacia adelante).

Para comprender de manera de una manera más óptima la asignación de las referencia a partir del modelo descargado, se recomienda revisar el tutorial sobre Mecanim, que publicaremos más adelante en este mismo curso, con las convenciones propuestas por Unity para la estructura de modelos

Convencion EstructuraWizard Ragdoll Referencias

Finalmente, se pulsará sobre el botón «Create» del asistente, y a continuación si pasamos al modo juego, se podrá apreciar como el personaje caerá al suelo desplomado (ver video del inicio). Para el funcionamiento del asistente Ragdoll con el modelo seleccionado, no deberá reproducir ninguna animación de manera automática.

Una vez realizados estos pasos, será posible crear un prefab en los recursos del proyecto, arrastrando el personaje gestionado con el asistente Ragdoll, y así poder instanciarlo cada vez que se estime oportuno.

Como se puede apreciar en el siguiente diagrama, cada una de las referencias establecidas en el asistente, implementarán nuevos componentes por cada una de las partes del modelo utilizado. Se utiliza como ejemplo el GameObject «Spine», dónde podrá apreciarse como tras crear un personaje Ragdoll, cada uno de las partes referenciadas implementará tres componentes, además del Transform por defecto:

Diagrama Antes y Despues de Ragdoll

  • Box Collider: colisionador que define un área con forma de cubo alrededor del objeto.
  • Rigidbody: componente que permite añadir a un GameObject algunas características que tendría un cuerpo en la realidad, como podrían ser masa, gravedad, fricción, etc.
  • Character Joint: componente que permite limitar la unión entre dos objetos, de gran utilidad para diseñar articulaciones que giren alrededor de un eje (se recomienda visualizar los apartados referentes a los componentes Fixed Joint e Hinge Joint para comprender con más exactitud su finalidad)

En la siguiente tabla se describen las propiedades que pueden configurarse dentro del componente Character Joint:

Propiedad
Función
Connected Body Referencia al objeto que implemente un rigidbody para la articulación. En caso de no asignarse ninguna referencia, se conectará con el mundo.
Anchor Punto del espacio local del GameObject alrededor del cual girará el conjunto.
Axis Giro de los ejes.
Auto Configure Connected Anchor Al activar esta opción, la posición del ancla conectado será calculada automáticamente para coincidir con la posición global de la propiedad anchor.
Connected Anchor Configuración manual de la posición del ancla conectado.
Swing Axis Dirección del eje en el espacio local, a partir del cual se producen las oscilaciones del objeto.
Swing Axis Define los valores para el eje de oscilación.
Low Twist Limit Límite inferior de la articulación.
High Twist Limit Límite superior de la articulación.
Swing Limit Spring Esta propiedad define los límites el movimiento del eje, estableciendo los valores de fuerza del muelle necesaria para mantener dos objetos unidos (spring) y la fuerza de amortiguación utilizada para disminuir el resorte (damper).
Swing 1 Limit Límite inferior definido alrededor de la oscilación del eje.
Swing 2 Limit Límite superior definido alrededor de la oscilación del eje.
Enable Projection Esta opción permite activar la proyección en las articulaciones.
Projection Distance Distancia de proyección de la articulación.
Projection Angle Ángulo de proyección de la articulación.
Break Force Fuerza que debe aplicarse para romper la unión.
Break Torque Torsión que debe aplicarse para romper la unión.
Enable Collision Si se activa esta opción, se habilitará la detección de colisiones entre cuerpos conectados por una articulación.
Enable Preprocessing Opción que permite ayudar a un procesamiento previo para configuraciones no posibles.

Nota: las propiedades de tipo limit (Low Twist Limit, High Twist Limit, Swing 1 Limit y Swing 2 Limit) permiten definir valores límite (limit), rebote (bounciness) y distancia de contacto (contact distance).

En la siguiente publicación mostraremos todo este proceso de implementación en un videotutorial.