Contador de oleadas
Lección 24 de 25 del curso Juego de Unity: Defensa de torres de Coddy.
El HUD muestra el número de oleada. El spawner lo sabe y GameManager lo muestra, así que el spawner genera un evento de C#, WaveStarted, con la oleada y el número de oleadas. A diferencia de los eventos estáticos de los enemigos, este pertenece a un único spawner, y GameManager se suscribe mediante su campo spawner:
void OnEnable()
{
spawner.WaveStarted += ShowWave;
}Un Action<int, int> pasa dos int, así que ShowWave recibe dos: void ShowWave(int wave, int total).
Desafío
IntermedioMuestra qué oleada está activa.
- En
WaveSpawner, añadepublic event Action<int, int> WaveStarted;(using System;) y actívalo coni + 1ywaves.Countcuando empiece una oleada. - En
GameManager, añadespawnerserializado (WaveSpawner) ywaveText(TMP_Text). Suscríbete en OnEnable, cancela la suscripción en OnDisable y muestraWave 1/8.
Pulsa «Jugar»: Wave 1/8 aparece en la parte superior derecha cuando empieza la primera oleada. Luego, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
[SerializeField] private int startMoney = 150;
[SerializeField] private int startLives = 20;
[SerializeField] private TMP_Text moneyText;
[SerializeField] private TMP_Text livesText;
private int money;
private int lives;
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
Enemy.Killed += OnKilled;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
Enemy.Killed -= OnKilled;
}
void Start()
{
money = startMoney;
lives = startLives;
ShowMoney();
ShowLives();
}
public bool TrySpend(int amount)
{
if (amount > money)
{
return false;
}
money -= amount;
ShowMoney();
return true;
}
public void Earn(int amount)
{
money += amount;
ShowMoney();
}
void OnKilled(Enemy enemy)
{
Earn(enemy.data.reward);
}
void OnReachedBase(Enemy enemy)
{
lives -= enemy.data.damage;
ShowLives();
}
void ShowMoney()
{
moneyText.text = "Money: " + money;
}
void ShowLives()
{
livesText.text = "Lives: " + lives;
}
}
Todas las lecciones de Juego de Unity: Defensa de torres
Practica por tu cuenta: Playground de Unity