Menu
CoddyTech

Ondate come dati

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 22 di 50.

Le ondate di un livello sono un elenco: tre grugniti, poi due bruti, poi un boss. Se scritte nel codice di uno spawner, ogni livello ha bisogno del proprio codice. Se scritte come dati, l’elenco viene inserito in un asset, uno per ogni livello, e un unico script dello spawner legge l’asset che gli viene fornito. Ogni voce è una classe [System.Serializable], quindi l’Inspector dell’asset mostra l’elenco:

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Wave
{
    public GameObject enemy;
    public int count = 1;
    public float spacing = 1f;
}

[CreateAssetMenu(menuName = "Game/Wave Set")]
public class WaveSet : ScriptableObject
{
    public List<Wave> waves;
    public float restBetweenWaves = 3f;
}

È tutto in un unico file, WaveSet.cs: lo ScriptableObject deve avere un file con il proprio nome, mentre la semplice classe Wave può stare accanto. Seleziona un asset WaveSet e l’Inspector mostra Waves con Size e le righe Element 0, Element 1, ciascuna con Enemy, Count e Spacing; il pulsante + aggiunge un’ondata. Lo spawner scorre l’elenco in una coroutine:

public class WaveSpawner : MonoBehaviour
{
    public WaveSet waveSet;

    void Start()
    {
        StartCoroutine(SendWaves());
    }

    IEnumerator SendWaves()
    {
        foreach (Wave wave in waveSet.waves)
        {
            for (int i = 0; i < wave.count; i++)
            {
                Instantiate(wave.enemy, transform.position, Quaternion.identity);
                yield return new WaitForSeconds(wave.spacing);
            }
            yield return new WaitForSeconds(waveSet.restBetweenWaves);
        }
        Debug.Log("Last wave sent");
    }
}

Con Level1 che contiene 3 grugniti distanziati di 0.5 secondi e poi 2 bruti, i grugniti arrivano a 0, 0.5 e 1 secondo; seguono l’intervallo dopo l’ultimo grugnito e la pausa di 3 secondi, e il primo bruto arriva a 4.5 secondi. Lo spawner di Level 2 riceve un asset Level2 con ondate più difficili, mentre lo script rimane lo stesso.

challenge icon

Sfida

Medio

Block Rain: i blocchi cadono dal cielo a ritmo e tu li schivi usando le frecce. Dropper fa cadere un blocco in ogni corsia del suo array lanes, sempre a 1 secondo di distanza. Trasforma il ritmo in dati, così che ogni canzone possa essere una risorsa:

  • In DropPattern.cs, scrivi una classe [System.Serializable] Drop con i campi pubblici lane (un int: -1 a sinistra, 0 al centro, 1 a destra) e delay (un float: i secondi da attendere prima di questa caduta). Sotto, scrivi DropPattern, uno ScriptableObject con [CreateAssetMenu] e i campi pubblici blockPrefab (un GameObject), laneWidth (un float) e drops (una List<Drop>).
  • In Dropper, sostituisci entrambi i campi con un campo pubblico pattern di tipo DropPattern. Per ogni caduta, nell'ordine, attendi il suo delay, poi fai cadere il blocco della risorsa pattern nella posizione di Dropper, spostata lungo x di lane volte laneWidth. Dopo l'ultima caduta, registra Pattern done.

Il progetto ha una risorsa Song1: larghezza corsia 2 e quattro cadute, e l'Inspector la inserisce nel campo pattern di Dropper. Premi Play e schiva, poi Check.

Provalo tu

using System.Collections.Generic;
using UnityEngine;

// Qui vanno Drop (un blocco: la sua corsia e l'attesa prima che arrivi) e DropPattern (l'asset)
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 Architettura dei giochi in Unity