GameDev/[Unity]
[유니티]Unity에서 GameObject의 활성화 상태를 확인하는 방법: activeSelf와 activeInHierarchy의 차이
Bit by Bit
2024. 11. 26. 23:59
728x90
Unity에서 GameObject의 활성화 상태를 확인할 때 사용하는 두 가지 중요한 프로퍼티가 있습니다:
- activeSelf
- activeInHierarchy
이 둘은 비슷해 보이지만, 실제로는 서로 다른 정보를 제공하며, 상황에 따라 반환 값이 다를 수 있습니다. 이번 글에서는 이 두 프로퍼티의 차이점과 활용 방법을 자세히 알아보겠습니다.
1. gameObject.activeSelf
정의:
activeSelf는 GameObject 자신의 활성화 상태를 나타냅니다.
이 프로퍼티는 GameObject의 자체적인 활성화 여부만 반환하며, 부모 오브젝트나 계층 구조(hierarchy)의 영향을 받지 않습니다.
특징:
- 자체 상태를 확인한다.
- 부모 GameObject의 상태에 영향받지 않음.
- 활성화된 상태에서 부모에 의해 비활성화된 경우에도 true를 반환.
사용 예:
Debug.Log(gameObject.activeSelf);
반환 값:
- true: GameObject가 SetActive(true)로 활성화된 상태.
- false: GameObject가 SetActive(false)로 비활성화된 상태.
실전 예제:
gameObject.SetActive(false);
Debug.Log(gameObject.activeSelf); // false
2. gameObject.activeInHierarchy
정의:
activeInHierarchy는 GameObject가 실제로 활성화 상태인지 여부를 나타냅니다.
즉, 부모 GameObject의 활성화 상태까지 포함하여 계층 구조 전체를 고려한 상태를 반환합니다.
특징:
- Hierarchy 전체를 기준으로 상태를 판단한다.
- 부모가 비활성화되면, 자식 오브젝트의 상태는 activeInHierarchy에서 항상 false로 반환된다.
- 자식의 activeSelf가 true라도, 부모가 비활성화되면 activeInHierarchy는 false가 된다.
사용 예:
Debug.Log(gameObject.activeInHierarchy);
반환 값:
- true: GameObject와 모든 부모 오브젝트가 활성화된 상태.
- false: GameObject가 비활성화되었거나, 부모 중 하나가 비활성화된 상태.
실전 예제:
parentObject.SetActive(false);
Debug.Log(childObject.activeSelf); // true
Debug.Log(childObject.activeInHierarchy); // false
3. activeSelf와 activeInHierarchy의 차이점
특징 | activeSelf | activeInHierarchy |
확인 범위 | GameObject 자신의 활성화 상태 | 계층 구조 전체를 고려한 활성화 상태 |
부모 상태의 영향 | 없음 | 있음 |
주요 용도 | 객체의 로컬 상태 확인 | 게임 내에서 실제 활성화 상태 확인 |
4. 실전 활용 시나리오
1) 특정 GameObject 자체 상태 확인 (activeSelf)
- 특정 GameObject가 로컬에서 활성화/비활성화 상태인지 확인할 때 사용합니다.
- 부모의 영향을 고려하지 않고, GameObject의 개별 상태만 확인하면 됩니다.
예제:
if (!button.activeSelf)
button.SetActive(true); // 비활성화된 버튼을 활성화
2) Hierarchy 전체에서의 활성화 상태 확인 (activeInHierarchy)
- GameObject가 실제로 활성화 상태인지 확인할 때 사용합니다.
- 게임 플레이 중 오브젝트가 부모의 상태에 따라 보이지 않는지 확인하거나, 특정 조건에서 작동 여부를 판단할 때 유용합니다.
예제:
if (enemy.activeInHierarchy)
enemy.GetComponent<EnemyAI>().StartAI(); // 활성화된 적만 행동 시작
5. 시각적인 예
- Parent.activeSelf: false
- Parent.activeInHierarchy: false
- Child.activeSelf: true
- Child.activeInHierarchy: false (부모가 비활성화 상태이므로)
Unity에서 GameObject의 활성화 상태를 정확히 이해하고, activeSelf와 activeInHierarchy를 적절히 활용하는 것은 효율적인 게임 개발에 매우 중요합니다.
- activeSelf는 GameObject의 로컬 상태를 확인할 때.
- activeInHierarchy는 게임 전체에서의 활성화 여부를 확인할 때 사용하세요.
이 두 프로퍼티의 차이를 명확히 이해하면, 계층 구조가 복잡한 프로젝트에서도 GameObject의 상태를 쉽게 관리할 수 있습니다.
728x90