Seguimos con el Tutorial de Unity 3D para principiantes. En la entrada anterior, (Rotar el Player) creamos un script que permitía girar a nuestro FPS. Hoy añadiremos una nueva funcionalidad; mover el player. Por lo que tendremos que desarrollar un nuevo script con unas pocas instrucciones que explicaremos a continuación.
Crear script para mover player
El juego es un FPS en primera persona, que necesitará desplazarse tanto en el eje X como en el eje Z mediante las flechas del teclado.
Pues bien, vamos a escribir un script al que llamaremos MovePlayer.
public class MovePlayer : MonoBehaviour { public float speed = 5.0f; void Update() { float deltaX = Input.GetAxis("Horizontal") * speed; float deltaZ = Input.GetAxis("Vertical") * speed; transform.Translate(deltaX * Time.deltaTime, 0, deltaZ * Time.deltaTime); } }
En el código anterior hemos declarado una variable pública speed y le hemos asignado una cantidad de movimiento inicial de 5.0f.
Como hemos declarado speed como variable pública, tenemos acceso a ella desde el inspector de Unity.
El método Update es llamado cada frame (fotograma) y es justamente ahí donde obtenemos la entrada de las flechas del teclado con Input.GetAxis(); con el parámetro “Horizontal” para el movimiento en el eje X y “Vertical” para el movimiento en el eje Z. El resultado lo multiplicamos por la variable speed y así obtenemos la cantidad de movimiento a aplicar.
En Update también accedemos al componente transform. Y usamos su método Translate para desplazar el player la cantidad indicada en cada eje.
La misma velocidad en diferentes computadoras
Algunas computadoras procesan el código más rápido que otras y eso afecta a la velocidad del juego. Es decir, el juego puede moverse mucho más lento en un dispositivo que ofrezca 30 fotogramas (frames) por segundo que en otro con 90 fps.
Ahí es donde entra en acción la instrucción Time.deltaTime, que es la cantidad de tiempo entre fotogramas. Así, multiplicando la velocidad por Time.deltaTime escalamos su valor más alto o más bajo dependiendo de la potencia de la computadora.
... transform.Translate(deltaX * Time.deltaTime, 0, deltaZ * Time.deltaTime); } }
De este modo, solucionamos el problema y el juego trabajará con la misma velocidad en cualquier dispositivo.
El componente CharacterController
Aunque el protagonista ya puede moverse a lo largo del terreno todavía no detecta las colisiones. Esto se debe a que no hemos accedido a su CharacterController, el componente que añadimos en anteriores entradas y que permite, entre otras cosas, percibir las colisiones con objetos.
En la siguiente parte de El tutorial de Unity 3D usaremos el componente CharacterController en lugar del componente transform para mover el player y detectar colisiones.
0 comentarios