Menu
CoddyTech

Onde come dati

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 27 di 64.

Le ondate di un livello sono un elenco: tre soldati semplici, poi due bruti, poi un boss. Se vengono scritte nel codice di uno spawner, ogni livello ha bisogno del proprio codice. Se vengono scritte come dati, l’elenco viene inserito in un asset, un asset per livello, e uno script dello spawner legge l’asset che gli viene assegnato. Ogni voce è una classe [System.Serializable], così 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: il ScriptableObject ha bisogno di un file con il proprio nome, mentre la semplice classe Wave può trovarsi accanto. Seleziona un asset WaveSet e l’Inspector mostra Waves con Size e le righe Element 0, Element 1, ognuna 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 soldati semplici a distanza di 0.5 secondi e poi 2 bruti, i soldati semplici arrivano a 0, 0.5 e 1 secondo; seguono l’intervallo dopo l’ultimo soldato semplice e la pausa di 3 secondi, quindi il primo bruto arriva a 4.5 secondi. Lo spawner di Level 2 riceve un asset Level2 con ondate più difficili, e lo script rimane uguale.

challenge icon

Sfida

Medio

Trasforma il ritmo di Dropper in una risorsa musicale.

  1. In DropPattern.cs, scrivi una classe Drop [System.Serializable] con int lane e float delay pubblici.
  2. Sotto, scrivi DropPattern : ScriptableObject con [CreateAssetMenu] e GameObject blockPrefab, float laneWidth, List<Drop> drops pubblici.
  3. In Dropper, usa public DropPattern pattern;: per ogni caduta, attendi drop.delay, poi fai cadere il blocco spostato di drop.lane * pattern.laneWidth lungo x.

Premi «Gioca»: cadono quattro blocchi. Poi premi «Verifica».

Provalo tu

using System.Collections.Generic;
using UnityEngine;

// Drop (un blocco: la sua corsia e l'attesa che lo precede) e DropPattern (l'asset) vanno qui

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity