using System; using UnityEngine; // 미션 목표 하나의 베이스. Mission 오브젝트의 자식으로 두면 자동 수집된다. // 새 종류의 미션이 필요하면 이걸 상속해서 IsComplete 구현 + 상태가 바뀔 때 // RaiseChanged()만 호출하면 된다 (예: 물건 옮기기, 특정 위치 방문, NPC에게 아이템 전달). public abstract class MissionObjective : MonoBehaviour { // 목표 달성 여부 — 되돌릴 수 있는 목표(물건을 도로 빼는 등)는 false로 돌아가도 된다. // 미션 완료는 "모든 목표가 동시에 true"인 순간 Mission 쪽에서 확정(래치)된다. public abstract bool IsComplete { get; } // 달성 상태가 바뀔 때마다 발행 — Mission이 구독해서 완료를 재판정한다 public event Action Changed; protected void RaiseChanged() => Changed?.Invoke(); }