jairogarcíarincón

Moviendo el jugador


7.51K

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.


Publicado el 30 de Enero de 2025

unityspace shooter