lunes, 30 de marzo de 2015

Problemas en el movimiento del personaje

Este artículo va a ser un poco un cajón de sastre sobre todos los aspectos del movimiento del personaje que no he tratado ya. 




En la parte de ataque finalmente he dado 3 movimientos de ataque, lo cual lleva 7 animaciones, las cosas se complican. Si damos al botón de ataque el personaje dará una estocada, y si no hacemos nada más volverá a posición neutral. Eso ya son 2 animaciones. Pero si mientras da la primera estocada, volvemos a dar al botón de ataque hará un segundo ataque, un combo. Así que hace falta la animación del segundo ataque y la de volver a posición neutral desde el segundo ataque. Ya van 4 animaciones, y también he dado opción a atacar mientras estamos en el aire. Esto es un poco más complicado, tiene la animación de coger impulso en el aire para dar el golpe, después una pequeña animación de 2 frames que es la de caer dando el espadazo, que al no saber cuánto vamos a caer necesitamos una pequeña en bucle, y por último la de acabar de caer y recoger hacia atrás. En total 7.



Diagrama Mecanim



La parte de ataque aéreo va en una sub-máquina de estados porque me estaba dando problemas. Eso hace que el diagrama quede más claro al tener ahí solo un estado y no los 3 que tiene dentro la máquina. ¿Y por qué no he hecho esto con más acciones para dejar un diagrama de primer nivel más sencillo? Porque cuando tienes una submáquina no puedes controlar bien las transiciones de los estados de la submáquina a otros estados. Funciona, pero se inventa la transición por defecto, y en algunas me gusta meter la mano y hacer que la transición sea más rápida, lenta, se de antes o después.



Otra cosa que he limitado es cuando se puede girar. El giro en mi control es libre, podemos girar todo lo que queramos en cualquier momento, pero cuando se trata de atacar con la espada era demasiado, podías dar casi 360º con la estela siguiendo todo el movimiento. Y ya que el atacar te frena si vas corriendo, he preferido que una vez que inicias un ataque en una dirección no puedas girar hasta finalizar el ataque. Lo que sí he dejado son unos instantes para cambiar la dirección entre el primer y segundo ataque del combo. De esta forma podemos dar rápidamente con la espada a un enemigo a la izquierda y que el segundo ataque sea contra uno a la derecha. Me ha parecido que así es lo suficientemente dinámico.



He tenido problemas con la detección del suelo. Algo que parecía más que controlado, que lo da por defecto el controlador de personaje de Unity, pero con algunas animaciones dejó de funcionar. Sigo sin entender bien porqué, pero con algunas animaciones la posición del personaje que marcaba quedaba bastante por debajo del personaje de verdad, y esto hacía que estuviera lanzando los rayos para encontrar el suelo por debajo del suelo, por lo que nunca sucedían las transiciones de aterrizar. Por ejemplo dar un salto y que el personaje se quedase en esa postura de cuclillas que tenía en el salto para siempre, a pesar de estar aparentemente a nivel de suelo ya. Y se produce un bloqueo, no puedes manejar más al personaje, jode el juego entero, es un problema serio.



Raycast al suelo


Al final he tomado una solución algo peregrina, pero que parece funcionar. En lugar de mandar los rayos desde la posición del personaje lo hago desde el hijo que contiene la malla, el cual está medido desde el centro de masas, osea desde la cintura del personaje más o menos, y bajo un poco ese inicio de rayo, de tal forma que el rayo ahora surge desde la mitad del muslo más o menos. Y en las animaciones donde tenía problemas, se lanza desde más abajo, la pantorrilla, pero nunca llega a quedar por debajo del personaje y por lo tanto el suelo no puede quedar entre el personaje y el inicio del rayo. En las pruebas que he hecho no he vuelto a tener esos atranques en una animación.



Otro problema que surgió fue con la capsula del collider. Ya había explicado que en algunas animaciones puse una curva para cambiar su altura y posición y ajustarse bien a la silueta del personaje en esa acción. Y que si alguna animación tenía transiciones con las animaciones afectadas también intentaba coger el valor. Pero ahora me ha dado problemas en animaciones que no tenian nada que ver, seguía pidiendo esos valores y al no tener curva ponía las cosas a 0, y el collider acababa como una pequeña pelota a los pies del personaje. Me ha tocado poner las dos curvas en todas las animaciones usadas.



Glow on gizmos


Y por último comentar un pequeño bug que no afecta al juego y me hace gracia. El efecto de glow que he añadido, al ser selectivo en teoría solo afecta a los materiales de tipo específico con unos shaders especiales que venían en el mismo paquete. Sin embargo si hago que se vean los gizmos en la pantalla del juego, las líneas que representan colliders, posiciones de peso... llevan glow, no se muy bien por qué. Curioso.

No hay comentarios :

Publicar un comentario