Menu
CoddyTech

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.

challenge icon

Sfida

Difficile

L’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 classe TowerLevel che l’Inspector può mostrare, con public float range, public float fireEvery, public int damage e public int cost (il prezzo per raggiungere quel livello), e TowerData, uno ScriptableObject con una voce nel menu Create e public 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 infoText mostra entrambi, come Level 1, 0 gold, ogni volta che cambiano.
  • Quando sono trascorsi i secondi indicati da fireEvery del livello dall’ultimo colpo e c’è un creep nel raggio (il collider di un creep entro range dalla torre, individuato da Physics.OverlapSphere), la torre spara al creep più vicino. Prende un proiettile da un ObjectPool<Bolt>, lo posiziona sulla torre e chiama bolt.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 bounty in oro: ascolta l’evento statico Creep.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 come Tower 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;
}
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