Eine Welle
Lektion 5 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.
Der Grunt und der Runner sind jetzt Prefabs, dazu kommen ein Tank und ein Boss, und ein Spawner steht auf WP0. Eine Welle besteht aus einigen Zahlen: welcher Gegner, wie viele und in welchem Abstand. Daher ist Wave eine Klasse mit [System.Serializable], und der Spawner enthält eine List<Wave>, die der Inspector mit den acht Wellen des Spiels füllt. Ohne [System.Serializable] kann Unity die Liste nicht füllen, und sie bleibt leer.
Das Erzeugen von Gegnern mit Abständen erfolgt über eine Coroutine: yield return new WaitForSeconds(...) wartet, ohne das Spiel anzuhalten. Ein Prefab kann nicht auf die Wegpunkte in der Szene verweisen, deshalb weist der Spawner jedem neuen Gegner direkt nach Instantiate seine eigenen zu:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);Aufgabe
EinfachSchicke die erste Welle Grunts den Weg entlang.
- Setze in
Wave.cs[System.Serializable]aufWave, mitpublic Enemy enemy;,public int count;undpublic float spacing;. - Füge in
WaveSpawner[SerializeField] private List<Wave> waves;und[SerializeField] private Transform[] waypoints;hinzu. - Starte von
Startaus eine Coroutine, die wie obenwaves[0].countGegner spawnt.
Drücke „Spielen“: Sechs Grunts marschieren los, im Abstand von 1,2 Sekunden. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
// Kommt später: Schickt die Gegner in Wellen den Pfad entlang.
public class WaveSpawner : MonoBehaviour
{
}
Alle Lektionen in Unity-Spiel: Tower Defense
Übe selbstständig: Unity-Playground