Unity시작과 컴포넌트

SetActive, enabled, activeSelf, activeInHierarchy

GameObject 비활성화와 Component 비활성화, active 상태 속성들이 어떻게 다른지 Unity 활성화 모델 기준으로 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

csharp
gameObject.SetActive(false);
renderer.enabled = false;

bool self = gameObject.activeSelf;
bool active = gameObject.activeInHierarchy;

설명

  • SetActive(false)는 GameObject 전체를 비활성화합니다. 그 오브젝트와 자식 오브젝트의 컴포넌트 업데이트, 렌더링, 충돌 참여가 함께 멈추는 쪽에 가깝습니다.
  • enabled = false는 특정 BehaviourRenderer 같은 컴포넌트만 끄는 방식입니다. 오브젝트 자체는 살아 있고, 다른 컴포넌트는 계속 동작할 수 있습니다.
  • activeSelf는 "이 오브젝트 자신이 켜져 있는가"를, activeInHierarchy는 "부모 포함 실제 계층 기준으로 지금 활성인가"를 보여 줍니다.
  • 그래서 부모가 꺼져 있으면 자식의 activeSelftrue여도 activeInHierarchyfalse일 수 있습니다. 이 차이를 모르고 디버깅하면 왜 안 보이고 왜 안 도는지 헷갈리기 쉽습니다.
  • SetActiveOnEnable / OnDisable 같은 라이프사이클에도 직접 영향을 주므로, 단순 렌더링 on/off와는 다른 강한 도구라고 생각하는 편이 좋습니다.

빠른 정리

항목의미
SetActive(false)GameObject 전체 비활성화
enabled = false특정 컴포넌트만 비활성화
activeSelf자기 자신의 활성 플래그
activeInHierarchy부모 포함 실제 활성 상태
라이프사이클 영향SetActiveOnEnable/OnDisable에 영향

주의할 점

"안 보이게만 하고 싶다"와 "아예 동작하지 않게 하고 싶다"는 다른 문제입니다. 단순 표시만 끌 건지, 입력/업데이트/자식까지 함께 멈출 건지 먼저 정한 뒤 enabledSetActive를 고르는 편이 좋습니다.

참고 링크

4 sources