Contents

Moviendo el jugador

Creación de Scripts

Para mover el jugador, vamos a hacerlo partiendo del movimiento que ya conocemos, para ello: Crea una nueva carpeta en Assets llamada Scripts Crea un nuevo script dentro llamado NaveController con el siguiente código y asócialo a la Nave. Ajusta la velocidad desde la Inspector window de la Nave.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NaveController : MonoBehaviour {

	//Declarlo la variable de tipo RigidBody que luego asociaremos a nuestro Jugador
	private Rigidbody rb;

	//Declaro la variable pública velocidad para poder modificarla desde la Inspector window
	[Range(5,15)]
	public float velocidad = 10;

	void Start () {

		//Capturo el rigidbody del jugador al iniciar el juego
		rb = GetComponent<Rigidbody>();

	}

	// Porque voy a utilizar la física para moverlo
	void FixedUpdate () {

		//Capturo el movimiento en horizontal y vertical de nuestro teclado
		float movimientoH = Input.GetAxis("Horizontal");
		float movimientoV = Input.GetAxis("Vertical");

		//Genero el vector de movimiento asociado, teniendo en cuenta la velocidad
		Vector3 movimiento = new Vector3(movimientoH * velocidad, 0.0f, movimientoV * velocidad);

		//Aplico ese movimiento al RigidBody del jugador
		rb.AddForce(movimiento);

	}
}
El principal que encontrarás al ejecutar el juego es que la nave se "sale" por los lados, por arriba y por abajo, con lo que tendremos que limitar el movimiento a los cuatro límites del juego (en los ejes X y Z), s bien en este caso lo haremos mediante el uso de la función Mathf.Clamp, que permite restringir el movimiento entre unos límites dados:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NaveController : MonoBehaviour {

	//Declarlo la variable de tipo RigidBody que luego asociaremos a nuestro Jugador
	private Rigidbody rb;

	//Declaro la variable pública velocidad para poder modificarla desde la Inspector window
	[Range(5,15)]
	public float velocidad = 10;

	//Límites del juego
	float xMin = -5.8f;
	float xMax = 5.8f;
	float zMin = -3.7f;
	float zMax = 13.5f;

	void Start () {

		//Capturo el rigidbody del jugador al iniciar el juego
		rb = GetComponent<Rigidbody>();

	}

	// Porque voy a utilizar la física para moverlo
	void FixedUpdate () {

		//Capturo el movimiento en horizontal y vertical de nuestro teclado
		float movimientoH = Input.GetAxis("Horizontal");
		float movimientoV = Input.GetAxis("Vertical");

		//Genero el vector de movimiento asociado, teniendo en cuenta la velocidad
		Vector3 movimiento = new Vector3(movimientoH * velocidad, 0.0f, movimientoV * velocidad);

		//Aplico ese movimiento al RigidBody de la nave
		rb.AddForce(movimiento);

		//Restrinjo la posición de la nave a los límites del juego
		rb.position = new Vector3
        (
            Mathf.Clamp (rb.position.x, xMin, xMax),
            0.0f,
            Mathf.Clamp (rb.position.z, zMin, zMax)
        );

	}
}
Para terminar el movimiento de la nave y hacerlo un poco más divertido, vamos a añadir una leve rotación en el eje Y al moverse hacia los lados:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NaveController : MonoBehaviour {

	//Declarlo la variable de tipo RigidBody que luego asociaremos a nuestro Jugador
	private Rigidbody rb;

	//Declaro la variable pública velocidad para poder modificarla desde la Inspector window
	[Range(5,15)]
	public float velocidad = 10;

	//Límites del juego
	float xMin = -5.8f;
	float xMax = 5.8f;
	float zMin = -3.7f;
	float zMax = 13.5f;

	//Declaro la variable pública giro para poder modificarla desde la Inspector window
	[Range(-1,-10)]
	public float giro = -4;

	void Start () {

		//Capturo el rigidbody del jugador al iniciar el juego
		rb = GetComponent<Rigidbody>();

	}

	// Porque voy a utilizar la física para moverlo
	void FixedUpdate () {

		//Capturo el movimiento en horizontal y vertical de nuestro teclado
		float movimientoH = Input.GetAxis("Horizontal");
		float movimientoV = Input.GetAxis("Vertical");

		//Genero el vector de movimiento asociado, teniendo en cuenta la velocidad
		Vector3 movimiento = new Vector3(movimientoH * velocidad, 0.0f, movimientoV * velocidad);

		//Aplico ese movimiento al RigidBody de la nave
		rb.AddForce(movimiento);

		//Restrinjo la posición de la nave a los límites del juego
		rb.position = new Vector3
        (
            Mathf.Clamp (rb.position.x, xMin, xMax),
            0.0f,
            Mathf.Clamp (rb.position.z, zMin, zMax)
        );

		//Rotación de la nave en Z en función de la velocidad en X
		rb.rotation = Quaternion.Euler (0.0f, 0.0f, rb.velocity.x * giro);

	}
}
Con esto estaría terminado el movimiento de la nave. En el siguiente apartado generaremos los disparos.