activeInHierarchy와 activeSelf

woollim·2024년 11월 9일
0

Unity개념

목록 보기
5/8

■ 특징 비교

○ activeSelf

  • 이 속성은 해당 게임 오브젝트 자체의 활성화 여부를 반환합니다.
  • 만약 오브젝트가 SetActive(false)로 설정되어 비활성화되었다면, activeSelf는 false를 반환합니다.
  • 즉, 부모 오브젝트의 상태와 관계없이 해당 오브젝트가 스스로 활성화되었는지를 확인하는 속성입니다.

○ activeInHierarchy

  • 이 속성은 해당 오브젝트가 계층 구조에서 최종적으로 활성화되었는지를 반환합니다.
  • 오브젝트 자신이 SetActive(true)로 활성화 상태여도 상위 부모 오브젝트가 비활성화되면, activeInHierarchy는 false가 됩니다.
  • 계층 구조 전체를 고려하여 최종적으로 이 오브젝트가 씬에서 활성화되어 있는지를 알 수 있습니다.

○ 요약

  • activeSelf : 오브젝트 자체의 활성화 여부를 나타냅니다.
  • activeInHierarchy : 계층 구조를 고려하여 최종적으로 활성화 상태인지 나타냅니다.


■ 실사용 예시 - activeSelf

○ 활용법

  • activeSelf는 해당 오브젝트 자체의 활성 상태를 확인하고 조작하는 데 유용합니다.
  • 주로 오브젝트가 독립적으로 활성화/비활성화되어야 할 때, 또는 직접 상태를 제어할 때 사용됩니다.

○ 예제 1 - 오브젝트 초기화

  • 게임 시작 시 오브젝트가 설정된 상태인지 확인하고, 필요한 경우 설정을 초기화할 수 있습니다.
if (!shieldObject.activeSelf)
{
    // 방패가 비활성화되어 있으면 초기화 작업을 수행합니다.
    shieldObject.SetActive(true);
    InitializeShield();
}
  • 이 코드에서는 shieldObject가 비활성화된 상태인 경우에만 활성화시키고 초기화 작업을 수행합니다.

○ 예제 2 - 특정 오브젝트만 비활성화하는 기능 구현

  • 게임에서 특정 기능을 껐다 켜야 하는 경우 activeSelf를 사용해 해당 오브젝트가 활성화된 상태인지 확인하고, 필요에 따라 설정을 변경할 수 있습니다.
if (lightObject.activeSelf)
{
    // 라이트 오브젝트가 활성화되어 있으면 끕니다.
    lightObject.SetActive(false);
}
else
{
    // 비활성화 상태이면 켭니다.
    lightObject.SetActive(true);
}
  • 이 코드에서는 lightObject가 활성화 상태이면 끄고, 비활성화 상태이면 켜는 기능을 구현할 수 있습니다.


■ 실사용 예시 - activeInHierarchy

○ 활용법

  • 특정 오브젝트가 실제로 씬에서 활성화 상태인지 확인해야 할 때 유용합니다.
  • 예를 들어, 오브젝트가 부모의 활성화 여부에 영향을 받는 상황에서 activeInHierarchy를 사용하면 유용합니다.

○ 예제 1 - UI 요소의 상태 체크

  • 게임에서 보스전이 시작될 때 특정 UI 요소(예: 체력바)를 활성화하려고 하는 상황을 가정해 봅시다. 이때 UI 요소의 부모가 비활성화되어 있을 수 있습니다.
if (bossHealthBar.activeInHierarchy)
{
    // 보스 체력바가 화면에 표시되었으므로 업데이트를 실행합니다.
    UpdateBossHealthBar();
}
else
{
    // 부모 오브젝트가 비활성화되어 있으면 아무 작업도 하지 않습니다.
}
  • 이 코드에서는 bossHealthBar가 계층 구조에서 최종적으로 활성화된 경우에만 체력바를 업데이트합니다.

○ 예제 2 - 오브젝트 상태에 따른 행동 변화

  • 예를 들어, NPC가 특정 이벤트에서 활성화되는지 확인해야 할 때 사용할 수 있습니다. 만약 계층 구조에서 NPC의 부모가 비활성화 상태이면 NPC도 자동으로 비활성화됩니다.
if (npcObject.activeInHierarchy)
{
    // NPC가 활성화되어 있으므로 대화를 시작할 수 있습니다.
    npcObject.StartDialogue();
}
else
{
    // NPC가 비활성화되어 있으면 대화를 시작할 수 없습니다.
}
  • 여기서는 NPC가 실제로 씬에 활성화되어 있는지 확인하고, 활성 상태일 때만 대화를 시작하게 합니다.
  • activeInHierarchy는 이렇게 계층 구조 전체에서 오브젝트의 최종적인 활성 상태를 확인해야 하는 상황에서 주로 사용됩니다.

1개의 댓글

comment-user-thumbnail
2024년 11월 9일

[감사콩]

답글 달기