Erreiche die Basis
Lektion 3 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.
Ein Gegner am letzten Wegpunkt hat die Basis erreicht: Er verschwindet, und die Basis verliert Leben. Die Leben gehören zum GameManager. Bald werden die Gegner aus Prefabs erstellt, und ein Prefab kann nicht auf den GameManager in der Szene verweisen, daher meldet sich der Gegner über ein statisches Ereignis. Es gehört zur Enemy-Klasse, also abonniert der GameManager es einmal und erhält Meldungen von jedem Gegner, auch von später erstellten. Der Gegner löst es mit ReachedBase?.Invoke(this); aus: Das ? überspringt den Aufruf, wenn niemand zuhört, und this teilt dem Zuhörer mit, welche Instanz es bis hierher geschafft hat.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}Ein statisches Ereignis besteht so lange wie das Spiel, daher braucht jedes += auch sein -=: Ein zerstörter GameManager, der sich nie abgemeldet hat, würde weiterhin aufgerufen werden.
Aufgabe
EinfachGegner, die die Basis erreichen, kosten Leben.
- Füge in
EnemyDatapublic int damage;hinzu. - Füge in
Enemypublic static event Action<Enemy> ReachedBase;hinzu (using System;). Löse es am letzten Wegpunkt aus und zerstöre den Gegner. - Füge in
GameManager[SerializeField] private int startLives = 20;undprivate int lives;hinzu und setze den Wert in Start. Abonniere das Ereignis wie oben;OnReachedBaseziehtenemy.data.damagevon den Leben ab.
Drücke „Spielen“: Beide Gegner verschwinden an der Basis. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
// Kommt später: Leben, Geld, das HUD, Gewinnen und Verlieren.
public class GameManager : MonoBehaviour
{
}
Alle Lektionen in Unity-Spiel: Tower Defense
Übe selbstständig: Unity-Playground