using System; using UnityEngine; public class GameManager : MonoBehaviour,ISceneInitializable { public static GameManager Instance; //현재 플레이어가 위치한 구역 (구역 상태의 단일 진실 출처) public Zone CurrentZone { get; private set; } = Zone.None; //구역이 바뀌면 발생. 사운드 등 여러 시스템이 구독해서 반응한다. public event Action OnZoneChanged; private void Awake() { if (Instance == null) { Instance = this; //만들어진 자신을 인스턴스로 설정 DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); //이미 인스턴스가 있으면 자신을 파괴 } } //구역 변경 요청 (ZoneTrigger 등에서 호출) public void SetZone(Zone zone) { if (zone == CurrentZone) return; //같은 구역이면 무시 CurrentZone = zone; OnZoneChanged?.Invoke(zone); //구독자(SoundManager 등)에게 통지 } public void OnSceneLoaded() { } }