Wellenzähler
Lektion 24 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.
Das HUD zeigt die Wellennummer an. Der Spawner kennt sie, und der GameManager zeigt sie an, daher löst der Spawner ein C#-Ereignis, WaveStarted, mit der Welle und der Anzahl der Wellen aus. Anders als die statischen Ereignisse der Gegner gehört es zu diesem einen Spawner, und der GameManager abonniert es über sein Feld spawner:
void OnEnable()
{
spawner.WaveStarted += ShowWave;
}Ein Action<int, int> übergibt zwei ints, daher nimmt ShowWave zwei entgegen: void ShowWave(int wave, int total).
Aufgabe
MittelZeige an, welche Welle gerade läuft.
- Füge in
WaveSpawnerpublic event Action<int, int> WaveStarted;(using System;) hinzu und löse das Ereignis zu Beginn einer Welle miti + 1undwaves.Countaus. - Füge in
GameManagerdie serialisierten Felderspawner(WaveSpawner) undwaveText(TMP_Text) hinzu. Abonniere das Ereignis in OnEnable, hebe das Abonnement in OnDisable auf und zeigeWave 1/8an.
Drücke auf „Spielen“: Wenn die erste Welle beginnt, wird oben rechts Wave 1/8 angezeigt. Drücke dann auf „Prüfen“.
Probier es selbst
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;
}
}
Alle Lektionen in Unity-Spiel: Tower Defense
Übe selbstständig: Unity-Playground