Tower Defense semplificato
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 61 di 64.
I nemici avanzano lungo la strada verso la tua base, che è difesa da una sola torre. La torre spara dardi al nemico più vicino quando è nel raggio d'azione, e ogni nemico che abbatte fa guadagnare oro. Premi Spazio per spendere l'oro e acquistare il livello successivo della torre: ogni livello aumenta la gittata, la velocità di tiro o la potenza dei colpi. Se un nemico raggiunge la base, riesce a passare. I livelli sono dati di gioco che un progettista modifica in una risorsa, senza toccare il codice; inoltre, la torre spara molti dardi, quindi li riutilizza da un pool invece di crearne e distruggerne uno a ogni colpo.
Scrivi due script: TowerData, il tipo di risorsa, e Tower. Creep, Bolt e CreepSpawner sono già pronti, così come Nearest e Show della torre.
Sfida
DifficileCompleta la torre; Nearest(range) e Show() sono pronti.
TowerLevel: serializzabile, conrange,fireEvery,damage,costpubblici.TowerDatacontienepublic List<TowerLevel> levels.- Ogni
fireEverysecondi, seNearest(range)trova un creep, posiziona un proiettile proveniente da unObjectPool<Bolt>presso la torre:bolt.Launch(creep, damage, pool.Release). Show()dopo cheCreep.Killedpaga labountye dopo che la barra spaziatrice acquista il livello successivo al suocost, registrandoTower level 2.
Premi «Gioca» e potenzia la torre. Poi premi «Verifica».
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;
// Pronto: il creep più vicino alla torre entro il raggio d'azione, oppure null.
Creep Nearest(float range)
{
Creep nearest = null;
float best = Mathf.Infinity;
foreach (Collider hit in Physics.OverlapSphere(transform.position, range))
{
if (hit.TryGetComponent(out Creep creep))
{
float distance = Vector3.Distance(transform.position, creep.transform.position);
if (distance < best)
{
best = distance;
nearest = creep;
}
}
}
return nearest;
}
// Pronto: mostra il livello e l'oro, nel formato Level 1, 0 gold.
void Show()
{
infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
}
}
Tutte le lezioni di Architettura dei giochi in Unity
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRipasso: torretta modulareRipasso: cannone doppio4Dati serializzati
Classi serializzabiliElenchi nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottinoRiepilogo: tira il bottino2Interfacce in Unity
IDamageableInterfacce e TryGetComponentGetComponentsRiepilogo: tasto InteragisciRiepilogo: il più vicino a portata5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseSalva il ventoOnde come datiRiepilogo: database degli oggettiRiepilogo: comprare dal negozioEsercitati da solo: Playground Unity