El control del juego no me gustaba,
sobre todo porque hacía muy frustrantes las secciones de salto, los
saltos con un salto de altura única (aunque a veces salta más o
menos de forma extraña), y en 4 direcciones, no en direcciones
libres. Por eso comencé a buscar tutoriales para ver cómo se las
apañaban para hacer un control de este tipo para rehacer el mío.
Así, a través de diversas búsquedas,
paseos por los foros y páginas de google llegué al blog
de Erik Ross. Me pareció muy interesante pues dedica 4 o 5
entradas a describir problemas con la detección de colisiones y
movimiento en Unity y en su controlador de personaje por defecto. Y
resulta que tenía muchos más problemas por el lado de las
colisiones de lo que creía. El blog requiere un cierto conocimiento
de matemáticas (e inglés), pero está muy bien. Se ve que está
haciendo un remake HD del Mario 64, y aprovecha para ir explicando
las cosas que está haciendo, a día de hoy casi todo referido al
controlador del personaje.
Por ejemplo uno de los temas que
explica, acompañado de gráficos muy útiles, es por qué con el
controlador de personaje de Unity, al bajar cuestas, el personaje
baja a trompicones, como si andase en plano y cada cierto tiempo se
diera cuenta que está en el aire y cayera un poquito. Y desde luego
en la solución de controlador que ofrece las bajadas se hacen de
forma suave.
Ofrece su solución junto a una demo, y es lo que se puede ver al principio del vídeo. Las 3 bolas son las 3 esferas con las que detecta las colisiones (en lugar de utilizar un capsule collider), así que evidentemente no se verán en la versión final, ni tampoco las líneas que dibujan las colisiones detectadas, ni representación de la máquina de estados de arriba a la izquierda. El modelo es un cilindro con una caja por cara, para que sepamos en qué dirección mira.
El suelo de la demo es un modelo, no es
terreno, como nos podemos imaginar por sus paredes de 90º. Y he
probado a poner un terreno y funciona, no te caes ni nada, aunque no
detecta igual de bien las colisiones. Una excusa más para cambiar mi
primera pantalla de terreno a modelo. Los controles que se ofrecen
son movimiento por el plano con las flechas, botón del salto y
control de la cámara con el ratón (lo que sería fácilmente
trasladable a un segundo joystick). Lo del control de la cámara me
sobra, aunque he conseguido adaptar el control de gravedad a una
cámara libre, mi principal problema. Pero después de tanto trabajo
voy a seguir con mi cámara sobre raíles. Aunque como me de muchos
problemas a lo mejor me planteo tirar de esta solución de cámara
libre.
Y probando me encontré un fallo, si
intentas subir por una pendiente te resbalas, pero el jugador seguirá
intentando subir de forma indefinida, aunque no pulses ningún botón.
Esto se debe a que el movimiento de avance se almacena en local en la
máquina de estados, y la fuerza de gravedad aplicada a la pendiente
se hace de forma física aparte, por lo que ese impulso de caer por
la pendiente no se almacena en nuestro movimiento, no ganamos ese
impulso, así que al llegar abajo seguimos teniendo la fuerza
“escaladora” original y volvemos para arriba. El propio autor del
sistema ha subido una versión mejorada, con una mejor detección del
suelo que mira si estamos sobre una cuesta y así lo toma como andar
y no como caída, pero seguimos sin ganar el momento de inercia al
caer. Yo he tomado una solución más sencilla, anular el movimiento
previo al finalizar una caída. Tampoco arregla el problema de la
inercia al caer, pero eso es bastante más complejo, y tampoco quiero
que mi personaje se deslice por las cuestas culo abajo como en el
Mario 64, y desde luego así rompo el bucle infinito de intentos de
escalada.
También se puede ver en el vídeo que
el personaje siempre encara la dirección de la cámara, es decir
nunca le podemos ver la cara, así que ese ha sido otro de los
cambios que he hecho, ahora el personaje encara la dirección hacia
la que anda (como Mario o Crash) y no puede andar de lado como los
personajes de FPS.
También he cambiado la mecánica del
salto. El salto por defecto es de altura única, siempre saltas lo
mismo, y me gustaría que se pudiera ajustar más, para que el
jugador tenga más control en las partes de plataformas. He seguido
el sistema de mario, desde los juegos originales de NES, si pulsas el
botón y sueltas en seguida salta poco, y si lo mantienes pulsado
salta más, según cuánto pulses. Y de ahí que haya una parte en la
primera pantalla con obstáculos cada vez más altos, para que te des
cuenta que si dejas pulsado saltas más alto y puedes con esos
obstáculos. Seguramente copie ese sistema de aprendizaje sin
tutorial de mierda, o lo intente. Volviendo al salto, ahora calculo
un salto mínimo y uno máximo, y si el botón queda pulsado se va
aumentando la fuerza vertical hasta llegar a la fuerza máximo en el
tiempo máximo de pulsación: medio segundo. Puede que modifique un
poco los valores para ajustar los saltos, pero el sistema quedará
así.
Estas son las variaciones más
sencillas que he hecho del controlador y su presentación, en el
próximo artículo hablaré de lo último que se ve en el vídeo, la
parte jodida, el cambio de gravedad.
No hay comentarios :
Publicar un comentario