Menu
CoddyTech

Gegnerwellen

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 44 von 50.

challenge icon

Aufgabe

Mittel

Die Gegner kommen jetzt in Wellen, und die Wellen sind Daten. Behalte alles aus den vorherigen Lektionen bei. Die Arena hat keine eigenen Gegner mehr: Die Prefabs Grunt und Dasher enthalten deine Skripte, vier Spawnpunkte befinden sich in den Ecken, und das Spawner-Objekt in der Mitte hat das Skript WaveSpawner.

  • Füge in WaveSet.cs eine Klasse Wave mit [System.Serializable] hinzu, mit public Enemy enemy (dem Prefab), public int count und public float spacing. WaveSet ist ein ScriptableObject mit [CreateAssetMenu], einem public List<Wave> waves und einem public float restBetweenWaves. Das Asset Arena der Szene enthält drei Wellen (3 Grunts im Abstand von 0.5 s, 2 Dasher im Abstand von 1 s, 5 Grunts im Abstand von 0.4 s) und eine Pause von 2 Sekunden.
  • Enemy erhält public static event Action<Enemy> Died, das mit dem Gegner ausgelöst wird, unmittelbar bevor er zerstört wird.
  • WaveSpawner erhält über den Inspector waveSet und spawnPoints sowie public int Wave { get; private set; }, die Nummer der laufenden Welle. Ab Start führt eine Coroutine die Wellen des Assets der Reihe nach aus. Für jede Welle: Wave um 1 erhöhen und protokollieren, zum Beispiel als Wave 1; die count Gegner der Welle im Abstand von spacing Sekunden spawnen, wobei Gegner i (beginnend bei 0) an spawnPoints[i % spawnPoints.Length] erscheint; warten, bis keine Gegner mehr am Leben sind; dann restBetweenWaves Sekunden pausieren. Nach der letzten Welle beginnt die Abfolge wieder mit der ersten, und Wave zählt weiter: 4, 5 und so weiter.
  • Zähle die lebenden Gegner mit dem Died-Ereignis: Abonniere es in OnEnable und hebe das Abonnement in OnDisable auf. Der Spawner liest das Asset nur aus: Eine im Editor während des laufenden Spiels vorgenommene Änderung an einem Asset bleibt nach dem Beenden von Play im Asset erhalten.

Drücke Play und überlebe ein paar Wellen, dann Check.

Probier es selbst

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // In einer späteren Lektion wird dies ergänzt: Die Wellen werden in die Arena geschickt.
}

Alle Lektionen in Spielarchitektur in Unity