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