Raggiungi la base
Lezione 3 di 25 del corso Gioco Unity: Tower Defense di Coddy.
Un nemico sull'ultimo punto di passaggio ha raggiunto la base: se ne va e la base perde vite. Le vite appartengono a GameManager. Presto i nemici saranno creati da prefab e un prefab non può fare riferimento a GameManager nella scena, quindi il nemico invia una notifica tramite un evento statico. Appartiene alla classe Enemy, quindi GameManager si iscrive una sola volta e riceve le notifiche di ogni nemico, anche di quelli creati in seguito. Il nemico lo attiva con ReachedBase?.Invoke(this);: ? evita l'invocazione se nessuno è in ascolto e this comunica all'ascoltatore quale istanza è arrivata alla base.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}Un evento statico vive per tutta la durata del gioco, quindi a ogni += deve corrispondere il suo -=: un GameManager distrutto che non si fosse mai disiscritto continuerebbe a essere chiamato.
Sfida
FacileI nemici che raggiungono la base fanno perdere vite.
- In
EnemyData, aggiungipublic int damage;. - In
Enemy, aggiungipublic static event Action<Enemy> ReachedBase;(using System;). All’ultimo waypoint, attiva l’evento e distruggi il nemico. - In
GameManager, aggiungi[SerializeField] private int startLives = 20;eprivate int lives;, da impostare in Start. Iscriviti come sopra;OnReachedBasesottraeenemy.data.damagealle vite.
Premi «Gioca»: entrambi i nemici scompaiono alla base. Poi premi «Verifica».
Provalo tu
using UnityEngine;
// Più avanti: vite, denaro, l'HUD, vittoria e sconfitta.
public class GameManager : MonoBehaviour
{
}
Tutte le lezioni di Gioco Unity: Tower Defense
1Il percorso
Punti di passaggioDati dei nemiciEsercitati da solo: Playground Unity