
여기 이전에 보여드렸던 메세지 브로커 역할을 하는 ScriptableEventSO가 있습니다.

각각 다른 프리팹 GlobalManager와 LocalManager의 EventListener가 이 SO를 참조하고 있었습니다.
그런데 LocalManager에 부착된 Listener가 작동을 하지 않아서 이리저리 살펴보니 웬 일??????

구독 및 호출 코드에서 해당 SO의 InstranceID를 확인해보니
GlobalManager의 Listener가 참조하는 ScriptableEventSO와
LocalManager의 Listener가 참조하는 ScriptableEventSO가 서로 다른 객체였던 것입니다!?!?!?!?!?!?!?!?!?
GPT에 물어보니 매 씬이 바뀔 때마다 직렬/역직렬을 거치는 과정에서 참조 SO가 새로 인스턴싱된다고 합니다.
그런데 최초 씬인 Initialize Scene에서부터 SO의 Enable이 2번 호출되는거로 보아 씬 변경과 관계없이 인스턴스가 2개 생기는 것 같은데??????????
암튼 해결 방법은 SerializedField로 박아넣지 말고 Resource.Load로 호출하라는 의미없는 조언뿐이었습니다.
public static ScriptableEventSO instance;
private void OnEnable()
{
if (instance == null)
instance = this;
}
이리저리 머리를 싸매고 고뇌한 결과 걍 이 SO를 싱글톤화시키니 원하는 대로 정상 작동했습니다.
public class ScriptableStageEventListener : MonoBehaviour
{
[SerializeField] private StageEventType type;
[SerializeField] private UnityEvent stageEvent;
private void OnEnable()
=> ScriptableEventSO.instance.RegisterStageEvent(type, this);
private void OnDisable()
=> ScriptableEventSO.instance.UnregisterStageEvent(type, this);
public void Raise()
=> stageEvent?.Invoke();
}
}
내가 클래스를 만들어 쓰란 것도 아니고 이미 에셋에 존재하는 SO를 참조하라는데 그걸 왜 뭔 인스턴스를 또 만들고 어이가없어서진짜
'무제_LR' 카테고리의 다른 글
| 플레이어에 FSM 적용에 FSM 적용 (0) | 2025.11.21 |
|---|---|
| 간단한 연출용 UI(Animator 사용) (0) | 2025.11.18 |
| ScriptableObject로 전역 이벤트 써먹기 (0) | 2025.11.12 |
| 간단한 Localization 및 언어별 Font 설정 (0) | 2025.11.11 |
| UI,,,,,구조,,,,및,,,,,매니저,,,인터페이스화,,,,,,,, (0) | 2025.11.10 |