jairogarcíarincón
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