Menu
CoddyTech

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.

challenge icon

Sfida

Facile

I nemici che raggiungono la base fanno perdere vite.

  1. In EnemyData, aggiungi public int damage;.
  2. In Enemy, aggiungi public static event Action<Enemy> ReachedBase; (using System;). All’ultimo waypoint, attiva l’evento e distruggi il nemico.
  3. In GameManager, aggiungi [SerializeField] private int startLives = 20; e private int lives;, da impostare in Start. Iscriviti come sopra; OnReachedBase sottrae enemy.data.damage alle 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

Esercitati da solo: Playground Unity