오늘 우리는 Unity에서 객체 활성화의 복잡성에 대해 깊이 파고들고 있습니다. 이 주제는 기본적인 것처럼 보일 수 있지만 미묘한 차이가 있습니다. Unity에서 스크립팅을 해본 적이 있다면 'activeSelf' 및 'activeInHierarchy'라는 매우 비슷하게 들리는 두 가지 속성을 보았을 것입니다. 얼핏 보면 상호 교환이 가능해 보일 수 있지만 서로 다른 용도로 사용됩니다.
activeSelf
'activeSelf'는 개체의 로컬 활성 상태를 나타냅니다. 간단히 말해서, 부모에 관계없이 객체가 명시적으로 활성 또는 비활성으로 설정되었는지 알려줍니다.
키 포인트
- SetActive 기능이나 인스펙터의 체크박스를 통해 설정한 상태만 반영됩니다.
- 상위 개체의 활성 상태는 고려하지 않습니다.
용법:
if (gameObject.activeSelf) {
// This object was explicitly set to active.
}
activeInHierarchy
반면에 activeInHierarchy는 전체 계층을 고려합니다. 개체와 모든 상위 개체가 활성 상태인 경우에만 개체가 계층 구조에서 활성화될 수 있습니다.
키 포인트:
- 객체와 모든 부모가 활성 상태이면 'true'를 반환합니다.
- 부모 개체가 비활성 상태인 경우 개체의 로컬 activeSelf가 true인 경우에도 activeInHierarchy는 false를 반환합니다.
용법:
if (gameObject.activeInHierarchy) {
// This object and all its parent objects are active.
}
실제 예
부모 게임 개체("우주선"이라고 함)와 중첩된 자식 게임 개체("외계인")가 있는 시나리오를 생각해 보십시오.
- "Spaceship"이 비활성화되고 "Alien"이 활성화된 경우 Alien.activeSelf는 true를 반환하지만 Alien.activeInHierarchy는 부모가 활성화되지 않았기 때문에 false를 반환합니다.
- "Spaceship"과 "Alien"이 모두 활성화된 경우 Alien.activeSelf와 Alien.activeInHierarchy는 모두 true를 반환합니다.
언제 어떤 것을 사용해야 할까요?
- 로컬 검사의 경우: 개체를 수동으로 활성화했는지 비활성화했는지에만 관심이 있는 경우 activeSelf를 사용하십시오.
- 전역 검사의 경우: 개체가 장면에서 실제로 활성화되어 있는지 확인해야 하는 경우(전체 계보를 고려하여) activeInHierarchy를 사용하십시오.
결론
activeSelf 및 activeInHierarchy는 사소한 세부 사항처럼 보일 수 있지만 차이점을 이해하면 Unity 개발에서 흔히 발생하는 함정을 피하는 데 도움이 됩니다. 올바른 시나리오에서 올바른 검사를 사용하면 더 강력하고 안정적인 게임을 만들 수 있습니다.
'Unity' 카테고리의 다른 글
Animation : Blend Tree (0) | 2023.08.24 |
---|---|
SerializeField 이해하기 (0) | 2023.08.10 |
Unity : 게임 오브젝트에 Bouncing (0) | 2023.08.09 |
Unity의 Rigidbody 구성 요소 이해 (0) | 2023.08.08 |
텍스처 압축 포맷에서 사용하는 용어 (0) | 2023.08.03 |