jairogarcíarincón

Moviendo al jugador


6.36K

Introducción



Para mover al Jugador, como en otros proyectos anteriores, necesitamos 3 componentes:

  • Un collider para las colisiones.
  • Un rigidbody para aplicar física al jugador.
  • Un script para interactuar con el objeto.


El Collider



Podemos utilizar diferentes tipos de colliders para nuestro modelo, si bien vamos a decantarnos por añadir y ajustar un Box Collider al objeto Jugador, ya que simplifica el renderizado y resuelve ciertos problemas de estabilidad en las animaciones.

El resultado debería ser similar a este:

6. Box Collider


No es perfecto pero cubre prácticamente todos los movimientos que vaya a realizar el jugador y además no tengo que modificarlo en cada frame por el movimiento.

El Rigidbody



Añade un Rigidbody al Jugador con las opciones por defecto:

7. Rigidbody


En este momento, al ejecutar el juego, nuestro Jugador debería permanecer quieto sobre el suelo.

8. Jugador quieto


El Script



Crea un nuevo script llamado JugadorController para, de momento y como en proyectos anteriores, generar el movimiento básico del jugador en las 4 direcciones (y en las diagonales al pulsar dos teclas simultáneamente):


Para que funcione, asocia el script al Jugador y asigna una velocidad de 0.2.


Salto del jugador



Como habrás observado, el jugador se mueve correctamente, pero ni rota en la dirección del movimiento ni tiene la opción de saltar, sino que va “patinando”.

Para hacer que el jugador pueda saltar, como en otras ocasiones, debemos modificar el script JugadorController de modo que pueda saltar cuando se pulse la tecla de salto y el jugador esté tocando el suelo. Además, para naturalizar el salto, vamos a añadir, además de una velocidad de salto, dos multiplicadores diferentes, uno para suavizar la caída (cuando ya está cayendo) y otro para acelerarla cuando aún está subiendo pero ya ha soltado el botón:

Los cambios en el script serían:



Si además queremos evitar que pueda volar, vamos a modificar el script para que incluya la comprobación isSuelo y la función isSuelo correspondiente.

Como nuestro jugador ya no es una esfera, en vez de utilizar la función Physhics.OverlapSphere de otras ocasiones, en este caso vamos a trazar un rayo desde el jugador (cuya transform originalmente está en su parte inferior hacia abajo mediante la función Physics.Raycast, a la que además debemos decirle de qué longitud será dicho rayo.

Modifica el script de JugadorController() de la siguiente forma:


Con esto el Jugador debería moverse y saltar correctamente, aunque aun siga "patinando".


Publicado el 03 de Diciembre de 2024

unityanimaciónhumanoide3d