Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Gegner, die die Basis erreichen, kosten Leben.

  1. Füge in EnemyData public int damage; hinzu.
  2. Füge in Enemy public static event Action<Enemy> ReachedBase; hinzu (using System;). Löse es am letzten Wegpunkt aus und zerstöre den Gegner.
  3. Füge in GameManager [SerializeField] private int startLives = 20; und private int lives; hinzu und setze den Wert in Start. Abonniere das Ereignis wie oben; OnReachedBase zieht enemy.data.damage von 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