lunes, 11 de mayo de 2015

Ragdoll con mecanim en Unity 5

Ya están casi todas las piezas hechas, cada vez queda menos para ponerme a construir de forma efectiva el primer nivel y que así podamos probar el juego, pero según voy haciendo cosas me voy dando cuenta de pequeños detalles que todavía me quedan.



En este caso ha sido que no tenía nada para cuando la vida llegaba a 0. Me faltaba que el personaje se muriera, y para eso tenía que hacer funcionar un ragdoll en Unity 5 con mecanim. Ya he hablado de como hacer un ragdoll, pero era en Unity 4 y sin usar mecanim.

Ya tuve en su momento problemas con mecanim, porque no me mostraba todos los huesos del personaje, y descubrí que podía hacer que se mostrasen los que yo quisiera exponiéndolos. Así pude hacer que se vieran las palmas de la mano, para colocar la espada en una mano y poner un collider en la otra, para que el brazo no atraviese paredes. Siguiendo el mismo procedimiento expuse todas las partes que necesitaba, pelvis, fémures, pantorrillas, tobillos, brazos, antebrazos, cabeza... y monté una ragdoll como había hecho siempre, y... no funciona.


Pasa algo un poco raro a veces, y es que el personaje queda quieto, con su animación de idle, pero se desplaza un poco, como si se deslizase sobre hielo. Pero por lo demás, da igual cómo configure la ragdoll o cada una de las partes, isKinematic, isTrigger, anular el animator, sigue sin funcionar. Simplemente no se cae al suelo, le coloco código para poder hacer que se caiga al dar a un botón, tal como hacía en Unity 4, y no se cae. Después de darle vueltas e intentar muchas configuraciones, del modelo, en código, en el editor, nada. Lo más que conseguí es que se cayesen los colliders de las partes, pero el cuerpo del personaje no acompañaba. En una de esas caídas me di cuenta del problema. Los transforms expuestos son de solo lectura, te dan la posición de esa parte del cuerpo, pero no la puedes modificar como si fuera un objeto normal, por eso las propiedades físicas de la ragdoll no hacen nada en este caso.

Yo miraba tutoriales por youtube y a la gente le salía el modelo con toda la jerarquía de huesos. Cuando expones huesos, salen todos al mismo nivel, no como jerarquía, así que vi que no es que los hubieran expuesto, tenía que ser otra cosa. No usaban rig legacy, tenían humanoid igual que yo. Llegué a pensar que era por el modelo en sí, lo mismo por la forma en que estaba hecho el mio es por lo que no funcionaba, era un problema de mi asset. Y aquí estuve apunto de dejarlo. Según estaba dando las últimas vueltas por Unity, mientras pensaba en que tendría que conseguir una animación de muerte y hacerlo como animación y no como Ragdoll di con la clave.


Optimize game objects

En la parte de rig, hay un checkbox que dice “optimize game objects, y ¿quién no quiere optimizaciones? Pues resulta que este era el problema, el no exponer la jerarquía del personaje es la optimización, y si se expone, solo en lectura. Si desmarcas ese check ya se puede acceder a la jerarquía completa desde el inspector y hacer una ragdoll.

Una vez ajustados los colliders que añade la ragdoll, veo que funciona, tengo puesto en un botón para que se muera y en otro para resucitar y cada vez cae en una posición distinta, que es lo que se busca. Pero surgen los problemas. El personaje sigue moviéndose solo, sigue el modo hielo. Después de diversas pruebas veo que deja de hacerlo si dejo desactivada la opción isKinematic en todas las partes de la ragdoll cuando el personaje está vivo. Y entonces surge otro problema. Con el Kinematic desactivado deja de funcionar ¡la estela de la espada!, sigo sin entender por qué, pero ahora la estela son paredes de unos 10 metros de profundidad y queda horrible.

Después de hacer muchas pruebas (pero muchas muchas) encontré un apaño para que no pasase, y es quitar los Kinematics de las partes de la ragdoll, menos del brazo (solo la parte superior, no el antebrazo) izquierdo, y así parece que entra en el equilibrio por el cual el personaje no se mueve solo, como si se lo llevase el viento, y la espada tampoco hace una estela rara. Bueno, tampoco estoy seguro si ahora la estela no hace un recorrido un pelín raro, pero comparado con la barbaridad anterior, está muy bien.

Hay un paso más de mejora en la ragdoll y es ajustar los joints. Así podemos elegir cuales son los ángulos máximos de cada articulaciones, en giro y al doblarse y otras cosas como la resistencia de rotura. No están mal configurados de inicio, a lo mejor algo laxos con los giros, y con la resistencia a rotura en infinito. Si vamos a usar mucho ragdolls (por ejemplo, en los enemigos que matemos cada 2 por 3) es bueno ajustar todo para evitar que se vean cosas raras de vez en cuando. O también podemos buscar lo contrario, poner valores bajos a la resistencia a rotura da situaciones bastante graciosas con piernas alargándose por el escenario como si fueran chicle, porque los huesos se rompen, pero la piel se estira, y es muy curioso. En mi caso, como solo puede morir el héroe y no es algo que pase demasiado (espero), y tampoco tengo el suficiente conocimiento de anatomía para hacer maravillas, los ajustes que he hecho han sido muy pocos.

En el vídeo enseño con los botones de pasar a ragdoll y volver a animación como funciona el ragdoll y cómo cada vez cae en una postura. En el juego final solo se usa cuando el personaje muere.

No hay comentarios :

Publicar un comentario