Każda fala
Lekcja 6 z 25 w kursie Gra w Unity: Obrona wieży w Coddy.
Jedna fala to za mało, by stworzyć grę. Procedura współprogramowa przechodzi kolejno przez każdą falę, robiąc przerwę przed każdą z nich, aby gracz mógł się przygotować, i informuje konsolę, która fala się rozpoczyna. Przerwa to kolejne WaitForSeconds na początku pętli:
for (int i = 0; i < waves.Count; i++)
{
yield return new WaitForSeconds(timeBetweenWaves);
// zapisz falę w logu, a następnie utwórz waves[i] jak poprzednio
}Fale są numerowane od 0 na liście, a od 1 dla gracza, dlatego konsola wyświetla "Wave " + (i + 1).
Wyzwanie
ŚredniWyślij każdą falę, robiąc przerwę przed każdą.
- W
WaveSpawnerdodaj[SerializeField] private float timeBetweenWaves = 8f;. - Przejdź pętlą przez
waves: odczekajtimeBetweenWaves, wyświetl w konsoli"Wave " + (i + 1), a następnie jak wcześniej utwórz obiekty zwaves[i]. - Po pętli wyświetl w konsoli
All waves sent.
Naciśnij „Graj”: po 8 sekundach w konsoli pojawi się Wave 1 i przyjdą Grunty. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
[SerializeField] private List<Wave> waves = new List<Wave>();
[SerializeField] private Transform[] waypoints;
void Start()
{
StartCoroutine(RunWaves());
}
IEnumerator RunWaves()
{
Wave wave = waves[0];
for (int n = 0; n < wave.count; n++)
{
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);
}
}
}
Wszystkie lekcje w sekcji Gra w Unity: Obrona wieży
Poćwicz samodzielnie: Edytor online Unity