기지에 도달하기
Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 25개 중 3번째.
마지막 경로 지점에 있는 적이 기지에 도달했습니다. 적은 사라지고 기지는 생명을 잃습니다. 생명은 GameManager에 속합니다. 곧 적은 프리팹으로 만들어지는데, 프리팹은 씬의 GameManager를 가리킬 수 없으므로 적은 정적 이벤트로 알립니다. 이 이벤트는 Enemy 클래스에 속하므로 GameManager는 한 번 구독하여 나중에 만들어지는 적을 포함한 모든 적의 알림을 받습니다. 적은 ReachedBase?.Invoke(this);로 이벤트를 발생시킵니다. ?는 듣는 사람이 없을 때 이벤트 호출을 건너뛰고, this는 리스너에게 어떤 적이 도달했는지 알려 줍니다.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}정적 이벤트는 게임이 지속되는 동안 살아 있으므로, 각각의 +=에는 이에 대응하는 -=가 필요합니다. 구독을 해제하지 않고 파괴된 GameManager가 계속 호출될 수 있기 때문입니다.
챌린지
쉬움기지에 도달한 적은 목숨을 깎습니다.
EnemyData에public int damage;를 추가합니다.Enemy에public static event Action<Enemy> ReachedBase;(using System;)를 추가합니다. 마지막 웨이포인트에 도달하면 이벤트를 발생시키고 적을 제거합니다.GameManager에[SerializeField] private int startLives = 20;과private int lives;를 추가하고, Start에서 값을 설정합니다. 위와 같이 구독합니다.OnReachedBase는enemy.data.damage만큼 목숨을 차감합니다.
‘플레이’를 누릅니다. 두 적 모두 기지에서 사라집니다. 그런 다음 ‘확인’을 누릅니다.
직접 해보기
using UnityEngine;
// 나중에 추가할 것: 목숨, 돈, HUD, 승리와 패배.
public class GameManager : MonoBehaviour
{
}
Unity 게임: 타워 디펜스의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드