Comunidad orientada al desarrollo de videojuegos

Unity3D–Ragdoll

Ragdoll es la técnica que se usa para aplicar fisicas y constrains a las partes de un modelo para simular un cuerpo inerte. De esta forma, podemos simular la muerte de un enemigo sin necesidad de hacer una animación previa de la muerte y de una forma dinámica.

En Unity3D hay 2 formas de hacer un Ragdoll, usando el wizard o añadiendo componentes a cada uno de los elementos que quieres que conformen el Ragdoll. Vamos a ver el wizard y luego vamos a trastear un poco en cada uno de los componentes para ajustar mas detalladamente nuestro Ragdoll.

La técnica es muy sencilla, vamos a usar el Asistente de Unity3D para aplicarle un Collider, un rigidbody y un componente Character Join para ajustar el ragdoll y los constrains, a las partes básicas para crear un Ragdoll en un humano, pero todo esto va a ser transparente para nosotros.

Empezaremos con el modelo que es un piloto espacial. (Antes era un Swat, de ahí los nombres de los huesos)

image

Vamos al menú GameObject –> Create Other –> Ragdoll y nos abrirá el Wizard para crear el Ragdoll. Ahí vemos los elementos básicos necesarios que nos pide el Asistente.

image

 

Lo siguiente que he hecho, es desplegar los elementos que componen el esqueleto de mi modelo, para encontrar todos los huesos que me va a pedir el Asistente.

image

 

El siguiente paso es muy intuitivo, tenéis que arrastras cada uno de los elementos de nuestro modelo al correspondiente en el Wizard, como en la imagen. Nos dan una serie de recomendaciones, como que el modelo este en pose de T (Con los brazos en cruz) que las orientaciones sean las correctas, etc… La masa (Mass) será repartida en peso proporcionalmente por cada uno de los huevos, y el Asistente aplicara una lógica de que hueso pesara mas que otro.

image

 

Pulsamos “Create” y si todo ha ido bien, nos va a crear el solito todos los elementos del ragdoll. Importante, el Ragdoll solo va a funcionar si nuestro modelo no esta ejecutando una animación. Así pues, si no tiene ninguna animación por defecto y le damos a Play, veremos como nuestro modelo se desploma, espero que hayáis puesto un suelo Guiño

imageimage

 

Espero que os haya salido, en mi caso, algunas extremidades no están funcionando correctamente, son demasiado rígidas y parece un bicho hecho por palos. Así que vamos a ir a esas articulaciones que no están funcionando bien del todo y vamos a modificar los parámetros del Ragdoll.

Lo primero que podemos hacer, es seleccionar el root de nuestro modelo, así veremos todos los Colliders asociados a sus hijos y podremos comprobar que tengan los tamaños adecuados.

image

 

En la imagen anterior, podemos ver que algunos Colliders son bastante grandes, así que voy a ajustarlos a unos tamaños mas adecuados. Para ellos, vamos a cada uno de los componentes y cambiamos el tamaño del Collider. Aquí vemos los cambios que he hecho al Collider de la cabeza y como ya os habréis dado cuenta, podemos ver el Rigidbody y el componente Character Joint que nos ha metido el Asistente. Si os fijáis en la masa (Mass), es una parte proporcional para la cabeza de los 20 iniciales que habíamos puesto en el Wizard.

image

 

Una vez hemos ajustado los tamaños de los colliders, vamos a ver que esta ocurriendo con las articulaciones que me han quedado algo rígidas. Selecciono el hueso que corresponde con la articulación de la rodilla izquierda y vemos que solo nos ha puesto valores en uno de los parámetros “Twist” de –80 a 0.

image

 

Twist corresponde al giro de la rodilla, y nosotros necesitamos doblarla, no girarla. Así que vamos a ajustar un poco lo valores para que la rodilla haga ese juego de movimiento que estamos buscando.

He puesto mucho menos margen entre Low Twist y High Twist para que el giro de la rodilla no sea tan exagerado, antes parecía que no tenia ligamentos. Por otro lado el Swing 1 y Swing 2, es para limitar cuando la rodilla se doble, en este caso, el primero es para adelante y el segundo es para atrás, esto puede cambiar dependiendo de la orientación de Joint. Break Force y Torque es para definir cuanta fuerza hace falta para romper el hueso y q se comporte como un trapo, en mi caso, no me interesa ese comportamiento.

image

 

He hecho los mismos cambios en la otra pierna y me he pasado por los brazos también para q no sea tan rígido el modelo, quizá me he pasado un poco en alguno de los Joints pero creo que puede valer.

image

 

Bueno, como os he comentado antes, si el modelo esta haciendo alguna animación, el ragdoll no va a funcionar, para que lo veáis, he hecho un ejemplo con el modelo haciendo una animación y cuando le hacéis click con el ratón, dejara de hacer la animación que sea (aquí entraría a funcionar el Ragdoll) y aplicará una pequeña fuerza donde hayamos hecho click simulando que ha sido alcanzado por un disparo de rifle.

Demo Ragdoll

Espero que os haya servido de ayuda.

, , ,

Leave a Reply