Menu
CoddyTech

Wellen

Lektion 4 von 18 im Kurs Unity-Spiel: Tower Defense von Coddy.

Die Gegner kommen in Wellen: eine Gruppe derselben Art, mit Abständen entlang des Pfads, dann eine Pause vor der nächsten Gruppe. Eine Welle besteht aus einigen Zahlen und ist daher eine [System.Serializable]-Klasse, und der Spawner verwaltet eine List<Wave>, die der Inspector als auszufüllende Zeilen anzeigt. Ohne [System.Serializable] kann Unity keine Wave speichern, der Inspector zeigt die Liste nicht an und sie bleibt leer.

Das Timing wird mit einer Coroutine umgesetzt: einer Schleife, die Gegner spawnt und dann new WaitForSeconds(...) zurückgibt, um zu warten, ohne den Rest des Spiels anzuhalten. Eine Feuerwerksshow funktioniert mit ihren Salven genauso, mit einer Pause nach jeder Salve:

IEnumerator Show()
{
    foreach (Salvo salvo in salvos)
    {
        for (int i = 0; i < salvo.rockets; i++)
        {
            Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
            yield return new WaitForSeconds(salvo.gap);
        }
        yield return new WaitForSeconds(pause);
    }
}

Die Gegner sind jetzt Prefabs. Die Felder eines Prefabs können nur auf Assets und auf Objekte innerhalb des Prefabs verweisen, daher ist das waypoints-Array eines neuen Gegners leer. Der Spawner verwaltet den Pfad und übergibt ihn jedem Gegner direkt nach Instantiate. Instantiate gibt den Typ zurück, der ihm übergeben wird. Bei einem Prefab-Feld vom Typ Enemy gibt es also den neuen Enemy zurück, bereit zum Konfigurieren.

challenge icon

Aufgabe

Einfach

Der Grunt und der Runner sind jetzt Prefabs, zusammen mit einem Tank und einem Boss mit ihren eigenen EnemyData. Das Spawner-Objekt steht auf WP0. Schicke die Gegner in Wellen:

  1. Erstelle in Wave.cs eine serialisierbare Klasse namens Wave mit den öffentlichen Feldern enemy (ein Enemy: das Prefab), count (ein int) und spacing (ein float, die Sekunden zwischen zwei Gegnern).
  2. Füge in WaveSpawner drei serialisierte private Felder hinzu: waves (eine List<Wave>), waypoints (ein Transform-Array) und timeBetweenWaves (ein float).
  3. Starte von Start aus eine Coroutine, die die Wellen der Reihe nach durchläuft. Warte für jede Welle timeBetweenWaves, gib die Nummer der Welle ab 1 als Wave 1 aus, erzeuge dann ihre count Gegner am ersten Wegpunkt, weise jedem die waypoints zu und warte nach jedem Gegner spacing.
  4. Gib nach der letzten Welle All waves sent aus.

Im Inspector werden die acht Wellen des Spiels und eine Pause von 8 Sekunden eingetragen. Drücke Play und beobachte, wie die ersten Wellen kommen, dann Check.

Probier es selbst

using UnityEngine;

// Kommt später: Schickt die Gegner in Wellen den Pfad entlang.
public class WaveSpawner : MonoBehaviour
{
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unity-Spiel: Tower Defense