Contents

Puntuación

Puntuació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: