Ondate
Lezione 4 di 18 del corso Gioco Unity: difesa della torre di Coddy.
I nemici arrivano a ondate: un gruppo dello stesso tipo, distanziato lungo il percorso, poi una pausa prima del gruppo successivo. Un'ondata è composta da pochi numeri, quindi è una classe [System.Serializable], e lo spawner mantiene un List<Wave> che l'Inspector mostra come righe da compilare. Senza [System.Serializable], Unity non può salvare una Wave, l'Inspector non mostra l'elenco e questo rimane vuoto.
La temporizzazione è gestita da una coroutine: un ciclo che genera gli oggetti e poi esegue uno yield di new WaitForSeconds(...) per attendere senza fermare il resto del gioco. Anche uno spettacolo pirotecnico funziona allo stesso modo, con le sue salve e una pausa dopo ciascuna:
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);
}
}Ora i nemici sono prefab. I campi di un prefab possono fare riferimento solo ad asset e a oggetti all'interno del prefab, quindi l'array waypoints di un nuovo nemico è vuoto. Lo spawner possiede il percorso e lo passa a ogni nemico subito dopo Instantiate. Instantiate restituisce il tipo che gli viene passato, quindi, con un campo prefab di tipo Enemy, restituisce il nuovo Enemy, pronto per essere configurato.
Sfida
FacileIl Grunt e il Runner ora sono prefab, insieme a un Tank e a un Boss con i rispettivi EnemyData. L’oggetto Spawner si trova su WP0. Invia i nemici a ondate:
- In
Wave.cs, crea Wave come classe serializzabile con i campi pubblicienemy(un Enemy: il prefab),count(un int) espacing(un float, i secondi tra due nemici). - In
WaveSpawner, aggiungi tre campi privati serializzati:waves(unaList<Wave>),waypoints(un array di Transform) etimeBetweenWaves(un float). - Da
Start, avvia una coroutine che scorre le ondate in ordine. Per ognuna: attenditimeBetweenWaves, registra il numero dell’ondata a partire da 1, comeWave 1, poi genera i suoicountnemici sul primo waypoint, assegna a ciascuno iwaypointse attendispacingdopo ogni nemico. - Dopo l’ultima ondata, registra
All waves sent.
L’Inspector compila le otto ondate del gioco e una pausa di 8 secondi. Premi Play e guarda arrivare le prime ondate, poi Check.
Provalo tu
using UnityEngine;
// Viene dopo: invia i nemici lungo il percorso a ondate.
public class WaveSpawner : MonoBehaviour
{
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.