Contador de ondas
Lição 24 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.
O HUD exibe o número da onda. O spawner sabe esse número, e o GameManager o exibe, então o spawner dispara um evento C#, WaveStarted, com a onda e o número de ondas. Diferentemente dos eventos estáticos dos inimigos, ele pertence a um único spawner, e o GameManager se inscreve por meio do campo spawner:
void OnEnable()
{
spawner.WaveStarted += ShowWave;
}Um Action<int, int> passa dois valores int, então ShowWave recebe dois: void ShowWave(int wave, int total).
Desafio
MédioMostre qual onda está acontecendo.
- Em
WaveSpawner, adicionepublic event Action<int, int> WaveStarted;(using System;) e dispare o evento comi + 1ewaves.Countquando uma onda começar. - Em
GameManager, adicionespawnerserializado (WaveSpawner) ewaveText(TMP_Text). Inscreva-se em OnEnable, cancele a inscrição em OnDisable e mostreWave 1/8.
Pressione “Jogar”: Wave 1/8 aparece no canto superior direito quando a primeira onda começa. Depois, pressione “Verificar”.
Experimente você mesmo
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 as lições de Jogo de Unity: Defesa de Torres
Pratique por conta própria: Playground de Unity