Dotrzyj do bazy
Lekcja 3 z 25 w kursie Gra w Unity: Obrona wieży w Coddy.
Wróg na ostatnim punkcie trasy dotarł do bazy: odchodzi, a baza traci życia. Życia należą do GameManagera. Wkrótce wrogowie będą tworzeni z prefabrykatów, a prefabrykat nie może wskazywać na GameManagera w scenie, więc wróg zgłasza to za pomocą zdarzenia statycznego. Należy ono do klasy Enemy, więc GameManager subskrybuje je raz i otrzymuje powiadomienia o każdym wrogu, także tych utworzonych później. Wróg wywołuje je za pomocą ReachedBase?.Invoke(this);: ? pomija wywołanie, gdy nikt nie nasłuchuje, a this informuje słuchacza, który typ przedostał się na koniec.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}Zdarzenie statyczne istnieje tak długo jak gra, więc każdemu += musi odpowiadać -=: zniszczony GameManager, który nigdy się nie wypisał, nadal otrzymywałby wywołania.
Wyzwanie
ŁatwyWrogowie, którzy docierają do bazy, odbierają życia.
- W
EnemyDatadodajpublic int damage;. - W
Enemydodajpublic static event Action<Enemy> ReachedBase;(using System;). Przy ostatnim punkcie trasy wywołaj to zdarzenie i zniszcz wroga. - W
GameManagerdodaj[SerializeField] private int startLives = 20;iprivate int lives;, ustawliveswStart. Zasubskrybuj zdarzenie tak jak wyżej;OnReachedBaseodejmuje od liczby żyć wartośćenemy.data.damage.
Naciśnij „Graj”: obaj wrogowie znikną przy bazie. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
// Do dodania później: życia, pieniądze, HUD, wygrywanie i przegrywanie.
public class GameManager : MonoBehaviour
{
}
Wszystkie lekcje w sekcji Gra w Unity: Obrona wieży
Poćwicz samodzielnie: Edytor online Unity