Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Wrogowie, którzy docierają do bazy, odbierają życia.

  1. W EnemyData dodaj public int damage;.
  2. W Enemy dodaj public static event Action<Enemy> ReachedBase; (using System;). Przy ostatnim punkcie trasy wywołaj to zdarzenie i zniszcz wroga.
  3. W GameManager dodaj [SerializeField] private int startLives = 20; i private int lives;, ustaw lives w Start. Zasubskrybuj zdarzenie tak jak wyżej; OnReachedBase odejmuje 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