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.
Desafío
FácilLos enemigos que llegan a la base cuestan vidas.
- En
EnemyData, añadepublic int damage;. - En
Enemy, añadepublic static event Action<Enemy> ReachedBase;(using System;). Al llegar al último punto de referencia, activa el evento y destruye al enemigo. - En
GameManager, añade[SerializeField] private int startLives = 20;yprivate int lives;, y asígnale un valor en Start. Suscríbete como antes;OnReachedBaserestaenemy.data.damagede 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