기본 패턴
csharp
private void OnEnable()
{
SomeSystem.OnNotify += HandleNotify;
}
private void OnDisable()
{
SomeSystem.OnNotify -= HandleNotify;
}설명
OnEnable/OnDisable은 GameObject active 상태에 따라 호출되며, Awake/Start/OnDestroy보다 더 많은 수명 주기를 다룹니다.- 이벤트 구독/해제, 코루틴 시작/중단, input/action map 등록 같은 작업을 여기에 둡니다.
OnDisable에서 unregister를 하지 않으면 이벤트가 계속 호출되어 메모리 누수가 발생할 수 있습니다.
짧은 예제
csharp
private void OnEnable()
{
NavigationSystem.OnNavigate += OnNavigate;
}
private void OnDisable()
{
NavigationSystem.OnNavigate -= OnNavigate;
}
private void OnNavigate(int index)
{
focusIndex = index;
}빠른 정리
| 메서드 | 쓰임 |
|---|---|
OnEnable | 이벤트/코루틴 등록 |
OnDisable | 등록해제, 상태 정리 |
gameObject.activeSelf | 상태 확인 |
주의할 점
OnDisable이 먼저 호출된 뒤 다시 OnEnable이 오므로 상태 초기화는 OnEnable에서 하고, OnDisable에서는 반드시 해제 작업을 넣으세요.
참고 링크
2 sources