jairogarcíarincón
Vamos a introducir un sistema de puntuaciones de modo que cada vez que la nave destruya un asteroide sumara 10 puntos utilizando una estructura de UI similar a la de juegos anteriores.
Genera un nuevo UI > Text y llámalo TextoContador.
Modifícalo a tu gusto y ánclalo arriba a la izquierda (con algo de padding)
Modifica el código de los script DestruirPorContacto y GameManager y para que cuente las puntuaciones:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestruirPorContacto : MonoBehaviour
{
public GameObject explosion;
public GameObject explosionNave;
private 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);
}
//Destruyo el disparo (con el que ha chocado)
Destroy(other.gameObject);
//Destruyo el asteroide
Destroy(gameObject);
//Actualizo el contador
gameManager.actualizarContador();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
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
void Start () {
StartCoroutine(crearAsteroides());
//Inicializo el contador
textoContador.text = "Puntuación: 0";
}
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;
}
}
Para finalizar, asocia la variable Texto Contador del GameManager con el objeto TextoContador. Un ejemplo del resultado final podría ser el siguiente:
Publicado el 30 de Enero de 2025
unityspace shooter