Unity라이프사이클과 타이밍

OnEnable / OnDisable

컴포넌트가 활성화/비활성화될 때 이벤트를 등록하거나 정리하는 기본 패턴을 정리합니다.

마지막 수정 2026년 3월 17일

기본 패턴

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