En la entrada anterior presentaba el
SuperCharacterController, y los cambios que había hecho, y en esta
me reservo el cambio principal, el control de gravedad, vuelvo a
poner el vídeo para que se vea de qué hablo.
Siempre tenía la duda de en el caso de
tener una cámara libre se aplicase el cambio de gravedad hacia donde
cambiaría. Es decir, si damos al botón de cambiar la gravedad hacia
la izquierda, hacia donde debería cambiar la gravedad, ¿según el
vector left del personaje?, ¿el vector left de la cámara?. Si se
hiciera con el del personaje sería un lío, por ejemplo si el
personaje está mirando hacia la pantalla (le vemos la cara) y
cambiamos la gravedad a su izquierda, en realidad la cambiamos a
nuestra derecha. ¿queríamos hacer eso? Seguramente no. Así que
para facilidad del usuario, me parece lógico que se cambie siempre
según su punto de vista. Ahora bien, al tener una cámara libre,
podríamos estar mirando en cualquier dirección, eso significaría
poder poner la gravedad en cualquier dirección, completa libertad, y
cosas un poco raras. ¿Gravedad mirando hacia una esquina?
Encontré una solución haciendo que la
gravedad se ajuste al eje más próximo. Es decir, imaginemos que el
personaje está moviéndose en diagonal, pero lo más cercano es el
eje +z, entonces al girar la gravedad a la izquierda, la gravedad
pasará de -y a -x. Es un sistema que funciona bastante bien en un
escenario como el de la demo, donde las paredes son rectas y
alineadas con los ejes. Al tener una cámara sobre raíles siempre
puedo hacerlo respecto a la cámara, pero si sigo haciéndolo
ajustado a los ejes y hago que los escenarios también sean ajustados
a los ejes intentando que no se note mucho que todo es muy
cuadradote. La ventaja es que así puedo realizar puzles y retos de
forma sencilla y fácil de probar y evito muchos posibles bugs y
tampoco vuelvo loco al jugador.