jairogarcíarincón
A sugerencia de un alumno, se podría mejorar el comportamiento de la nave al llegar a los límites de modo que no sea posible salirse de ellos aún cuando la nave sigue rotando.
Para ello, bastaría con modificar el método FixedUpdate de NaveController para que quite velocity en el eje de movimiento al llegar a los límites. Además, haremos la rotación de la nave dependiente de la variable movimientoH (porque si no al llegar a los límites dejará de rotar al haberle quitado velocity:
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);
//Le quito la velocity (x o z) si llega a los límites
if (rb.position.x < xMin || rb.position.x > xMax)
{
rb.velocity = new Vector3(0, 0, rb.velocity.z);
}
if (rb.position.z < zMin || rb.position.z > zMax)
{
rb.velocity = new Vector3(rb.position.x, 0, 0);
}
//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 del movimiento h, la velocidad y el giro
rb.rotation = Quaternion.Euler(0.0f, 0.0f, movimientoH * velocidad * giro);
}
Para finalizar, modifica el valor de la variable giro a -1 si no quieres que la nave rote tanto.
SI estás interesado en avanzar todavía más, te invito a seguir los dos videos siguientes (en inglés):
Extending Space Shooter
Mobile Development: Space Shooter
En el primero de ellos se añaden enemigos, mas daños, un fondo que se va moviendo, etc. y en el segundo se adapta el juego para que los controles funcionen en dispositivos móviles.
Publicado el 30 de Enero de 2025
unityspace shooter