Menu
CoddyTech

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.

challenge icon

Sfida

Facile

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

  1. In Wave.cs, crea Wave come classe serializzabile con i campi pubblici enemy (un Enemy: il prefab), count (un int) e spacing (un float, i secondi tra due nemici).
  2. In WaveSpawner, aggiungi tre campi privati serializzati: waves (una List<Wave>), waypoints (un array di Transform) e timeBetweenWaves (un float).
  3. Da Start, avvia una coroutine che scorre le ondate in ordine. Per ognuna: attendi timeBetweenWaves, registra il numero dell’ondata a partire da 1, come Wave 1, poi genera i suoi count nemici sul primo waypoint, assegna a ciascuno i waypoints e attendi spacing dopo ogni nemico.
  4. 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
{
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: difesa della torre