Menu
CoddyTech

Llega a la base

Lección 3 de 25 del curso Juego de Unity: Defensa de torres de Coddy.

Un enemigo en el último punto de ruta ha llegado a la base: se va y la base pierde vidas. Las vidas pertenecen a GameManager. Pronto, los enemigos se crearán a partir de prefabricados, y un prefabricado no puede apuntar a GameManager en la escena, así que el enemigo informa mediante un evento estático. Pertenece a la clase Enemy, por lo que GameManager se suscribe una vez y recibe las notificaciones de todos los enemigos, incluidos los que se creen más adelante. El enemigo lo activa con ReachedBase?.Invoke(this);: ? lo omite si nadie está escuchando, y this le indica al oyente qué tipo ha llegado.

void OnEnable()
{
    Enemy.ReachedBase += OnReachedBase;
}

void OnDisable()
{
    Enemy.ReachedBase -= OnReachedBase;
}

Un evento estático existe mientras dure el juego, así que cada += necesita su -=: se seguiría llamando a un GameManager destruido que nunca se hubiera desuscrito.

challenge icon

Desafío

Fácil

Los enemigos que llegan a la base cuestan vidas.

  1. En EnemyData, añade public int damage;.
  2. En Enemy, añade public static event Action<Enemy> ReachedBase; (using System;). Al llegar al último punto de referencia, activa el evento y destruye al enemigo.
  3. En GameManager, añade [SerializeField] private int startLives = 20; y private int lives;, y asígnale un valor en Start. Suscríbete como antes; OnReachedBase resta enemy.data.damage de las vidas.

Pulsa «Jugar»: ambos enemigos desaparecen en la base. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

// Vendrá más adelante: las vidas, el dinero, el HUD, la victoria y la derrota.
public class GameManager : MonoBehaviour
{
}

Todas las lecciones de Juego de Unity: Defensa de torres

Practica por tu cuenta: Playground de Unity