Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Grunt 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:

  1. W pliku Wave.cs utwórz serializowalną klasę Wave z publicznymi polami enemy (Enemy: prefab), count (int) i spacing (float, liczba sekund między dwoma wrogami).
  2. W WaveSpawner dodaj trzy serializowane pola prywatne: waves (a List<Wave>), waypoints (tablica Transform) i timeBetweenWaves (float).
  3. Z Start uruchom coroutine, która przechodzi kolejno przez fale. Dla każdej z nich: odczekaj timeBetweenWaves, wyświetl w logu numer fali, zaczynając od 1, jako Wave 1, a następnie utwórz jej count wrogów w pierwszym punkcie kontrolnym, przypisz każdemu z nich waypoints i po każdym wrogu odczekaj spacing.
  4. 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
{
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Unity: Obrona wieżowa