■ 특징 비교
○ 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는 이렇게 계층 구조 전체에서 오브젝트의 최종적인 활성 상태를 확인해야 하는 상황에서 주로 사용됩니다.
[감사콩]