jairogarcíarincón

Game Over

Para terminar el juego, vamos a añadir un texto de Game Over, así como una opción que permita reiniciar el juego.

Para el texto de Game Over o Juego Terminado, añade un UI > Text llamado TextoMensaje al Canvas ya existente con el formato y texto que desees en el centro de la pantalla y modifica el código de los scripts GameManager y DestruirPorContacto:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {

public GameObject asteroide; //objeto a instanciar
public Vector3 posicion; //posición (límites) en la que instanciar
public int numeroDeAsteroides; //número de objetos en cada ola
public float esperaInicial;
public float esperaEntreAsteroides;
public float esperaEntreOlas;
public Text textoContador; //caja de texto para el contador
public int contador; //Entero para contar los puntos
public Text textoMensajes; //caja de texto para el mensaje de juego terminado

void Start () {

StartCoroutine(crearAsteroides());

//Inicializo el contador
textoContador.text = "Puntuación: 0";

//Oculto el mensaje de juego terminado
textoMensajes.enabled = false;

}

IEnumerator crearAsteroides(){

//Espera inicial
yield return new WaitForSeconds(esperaInicial);

while (true){

for (int i = 0; i < numeroDeAsteroides; i++)
{
//Posición aleatoria entre los límites (positivo y negativo) que establezcamos
Vector3 posicionAsteroide = new Vector3(Random.Range(-posicion.x, posicion.x), posicion.y, posicion.z);
//Rotación
Quaternion rotacionAsteroide = Quaternion.identity;
//Instancio el asteroide
Instantiate(asteroide, posicionAsteroide, rotacionAsteroide);
//Espera entre asteroides
yield return new WaitForSeconds(esperaEntreAsteroides);
}

//Espera entre olas
yield return new WaitForSeconds(esperaEntreOlas);

}

}

//Actualizo el contador (desde DestruirPorContacto)
public void actualizarContador(){

contador += 10;
textoContador.text = "Puntuación: " + contador;

}

void Update()
{
//Reiniciar el juego con la tecla R
if (Input.GetKeyDown(KeyCode.R))
{
SceneManager.LoadScene("Juego");
}
}
}



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

public class DestruirPorContacto : MonoBehaviour
{

public GameObject explosion;
public GameObject explosionNave;
GameManager gameManager;


void Start()
{
//Busco el script de GameManager
gameManager = FindObjectOfType<GameManager>();
}

//Al entrar en el objeto
void OnTriggerEnter(Collider other)
{
//Para que no se destruya con los límites
if (other.name != "Limites")
{

//Explosión del disparo en su posición y rotación
Instantiate(explosion, transform.position, transform.rotation);

if (other.name == "Nave")
{
//Explosión de la nave en su posición y rotación
Instantiate(explosionNave, other.transform.position, other.transform.rotation);

//Mostrar mensaje de juego terminado
gameManager.textoMensajes.enabled = true;

}

//Destruyo el disparo (con el que ha chocado)
Destroy(other.gameObject);

//Destruyo el asteroide
Destroy(gameObject);

//Actualizo el contador
gameManager.actualizarContador();
}
}
}


Para terminar, asocia la variable Texto Mensajes de GameManager con el objeto TextoMensajes.

Como podrás comprobar, en el código hemos añadido la opción de reiniciar el juego en cualquier momento pulsando la tecla R. Para que el usuario lo sepa, añade un UI > Text llamado TextoReiniciar al Canvas ya existente con el mismo formato que TextoContador arriba a la derecha y con el texto Reiniciar (R).

El resultado podría ser el siguiente:


Publicado el 30 de Enero de 2025

unityspace shooter