Dati dei nemici
Lezione 2 di 18 del corso Gioco Unity: difesa della torre di Coddy.
Un gioco tower defense ha diversi tipi di nemici: fantaccini, corridori veloci, carri armati lenti. Ogni fantaccino cammina alla stessa velocità e parte con la stessa salute, quindi quei valori appartengono al tipo, non a un singolo nemico. Vanno in una risorsa ScriptableObject, una per tipo, e ogni nemico di quel tipo fa riferimento a essa. Modifica la risorsa e cambierà con essa ogni nemico di quel tipo.
Una risorsa non deve contenere lo stato di un singolo nemico. Un fantaccino che ha subito un colpo ha meno salute di quello dietro di lui, quindi la risorsa contiene maxHealth, la salute iniziale di un fantaccino, e ogni nemico la copia in un proprio campo. Un gioco di corse suddivide un'auto allo stesso modo:
[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
public float topSpeed = 30f;
public float tankSize = 50f;
}
public class Car : MonoBehaviour
{
public CarData data;
private float fuel;
void Awake()
{
fuel = data.tankSize;
}
}Ogni auto di un modello condivide un CarData e consuma il proprio fuel. Scrivendo invece data.tankSize -= used, si svuoterebbe il serbatoio di tutte le auto di quel modello contemporaneamente e, nell'Editor, la modifica resterebbe nella risorsa dopo Play. Awake viene eseguito non appena l'oggetto viene creato, quindi la copia è pronta prima che qualcosa possa usarla.
Sfida
FacileUn Runner si unisce al Grunt: è più veloce e ha meno salute. Assegna a ciascun tipo una propria risorsa.
- In
EnemyData.cs, fai in modo che EnemyData sia creabile dal menu Create con il nome di menuTower Defense/Enemy Datae aggiungigli i campi pubblicispeed(un float),maxHealthereward(int). - In
Enemy.cs, sostituisci il campospeedcon un campo pubblicodatadi tipo EnemyData e fai muovere il nemico alla velocitàdata.speed. - Aggiungi un int privato
healthe impostalo sul valoremaxHealthdella risorsa inAwake.
Il progetto ha una risorsa GruntData (velocità 2, salute 9, ricompensa 5) e una risorsa RunnerData (velocità 3.5, salute 5, ricompensa 3); nell'Inspector, assegna a ciascun nemico la propria risorsa. Premi Play e guarda il Runner superare il Grunt, poi premi Check.
Provalo tu
using UnityEngine;
// Verrà più avanti: le statistiche di un tipo di nemico, come asset.
public class EnemyData : ScriptableObject
{
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.