Fale
Lekcja 4 z 18 w kursie Gra Unity: Obrona wieżowa w Coddy.
Wrogowie pojawiają się falami: grupa jednego rodzaju, rozmieszczona wzdłuż ścieżki, a następnie przerwa przed kolejną grupą. Fala to kilka liczb, więc jest klasą [System.Serializable], a spawner przechowuje List<Wave>, którą Inspector wyświetla jako wiersze do wypełnienia. Bez [System.Serializable] Unity nie może zapisać Wave, Inspector nie wyświetla listy i pozostaje ona pusta.
Synchronizację realizuje coroutine: pętla, która tworzy obiekty, a następnie wykonuje new WaitForSeconds(...), aby zaczekać bez zatrzymywania reszty gry. Pokaz fajerwerków przebiega tak samo — salwa po salwie, z przerwą po każdej z nich:
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);
}
}Wrogowie są teraz prefabami. Pola prefabu mogą wskazywać tylko zasoby i obiekty znajdujące się wewnątrz prefabu, więc tablica waypoints nowego wroga jest pusta. Spawner zarządza ścieżką i przekazuje ją każdemu wrogowi zaraz po Instantiate. Instantiate zwraca typ, który otrzymał, więc jeśli pole prefabu jest typu Enemy, zwraca nowego Enemy, gotowego do skonfigurowania.
Wyzwanie
ŁatwyGrunt i Runner są teraz prefabami, do których dołączyły Tank i Boss z własnymi obiektami EnemyData. Obiekt Spawner znajduje się w punkcie WP0. Wysyłaj wrogów falami:
- W pliku
Wave.csutwórz serializowalną klasę Wave z publicznymi polamienemy(Enemy: prefab),count(int) ispacing(float, liczba sekund między dwoma wrogami). - W
WaveSpawnerdodaj trzy serializowane pola prywatne:waves(aList<Wave>),waypoints(tablica Transform) itimeBetweenWaves(float). - Z
Starturuchom coroutine, która przechodzi kolejno przez fale. Dla każdej z nich: odczekajtimeBetweenWaves, wyświetl w logu numer fali, zaczynając od 1, jakoWave 1, a następnie utwórz jejcountwrogów w pierwszym punkcie kontrolnym, przypisz każdemu z nichwaypointsi po każdym wrogu odczekajspacing. - Po ostatniej fali wyświetl w logu
All waves sent.
W Inspectorze uzupełnij osiem fal gry i przerwę wynoszącą 8 sekund. Naciśnij Play i obserwuj nadejście pierwszych fal, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
// Pojawi się później: wysyła wrogów falami wzdłuż ścieżki.
public class WaveSpawner : MonoBehaviour
{
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.