Tower Defense semplificato
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 48 di 50.
I creep avanzano lungo la strada verso la tua base, sorvegliata da una sola torre. La torre spara dardi al creep più vicino quando si trova a portata, e ogni creep che abbatte paga oro. La barra spaziatrice spende l’oro per il livello successivo della torre: ogni livello aumenta la gittata, la velocità di tiro o la potenza dei colpi. Un creep che raggiunge la base riesce a passare. I livelli sono dati di gioco che un designer configura in un asset, senza toccare il codice; inoltre, la torre spara molti dardi, quindi li riutilizza da un pool invece di crearne e distruggerne uno per ogni colpo.
Scrivi due script: TowerData, il tipo di asset, e Tower. Creep, Bolt e CreepSpawner sono già pronti.
Sfida
DifficileL’Inspector fornisce a Tower data (l’asset Arrow), boltPrefab e infoText. Leggi la barra spaziatrice tramite Keyboard.current dell’Input System.
- In
TowerData.cs: una classeTowerLevelche l’Inspector può mostrare, conpublic float range,public float fireEvery,public int damageepublic int cost(il prezzo per raggiungere quel livello), eTowerData, uno ScriptableObject con una voce nel menu Create epublic List<TowerLevel> levels. L’asset Arrow contiene tre livelli: gittata 4, ogni 1 s, danno 1, costo 0; gittata 5, ogni 0.6 s, danno 1, costo 6; gittata 6, ogni 0.4 s, danno 2, costo 12. - La torre parte dal primo livello con 0 monete d’oro, e
infoTextmostra entrambi, comeLevel 1, 0 gold, ogni volta che cambiano. - Quando sono trascorsi i secondi indicati da
fireEverydel livello dall’ultimo colpo e c’è un creep nel raggio (il collider di un creep entrorangedalla torre, individuato daPhysics.OverlapSphere), la torre spara al creep più vicino. Prende un proiettile da unObjectPool<Bolt>, lo posiziona sulla torre e chiamabolt.Launch(creep, damage, pool.Release): il proiettile chiama quell’ultimo argomento quando ha finito, così viene restituito al pool. Un proiettile viene disattivato mentre attende nel pool e attivato quando viene prelevato. - Ogni creep che muore fa guadagnare il suo
bountyin oro: ascolta l’evento staticoCreep.Killed. - La barra spaziatrice acquista il livello successivo, se esiste e l’oro copre il suo
cost: il costo viene sottratto dall’oro e la torre sale di livello, registrandolo nel log comeTower level 2. Altrimenti, premere la barra spaziatrice non fa nulla.
Premi Play, tieni premuto sulla strada e potenzia, poi premi Check.
Provalo tu
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;
public class Tower : MonoBehaviour
{
[SerializeField] private TowerData data;
[SerializeField] private Bolt boltPrefab;
[SerializeField] private TMP_Text infoText;
private int level;
private int gold;
}
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
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRiepilogo: torretta modulare4Dati serializzati
Classi serializzabiliListe nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottino7Macchine a stati
Gli stati come classiUna macchina a statiTransizioniIntelligenze dei nemiciRiepilogo: stati della porta10Progetto: Sopravvissuto nell’arena
L’eroeTipi di nemici5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseOndate come datiRiepilogo: database degli oggetti