게임 오브젝트를 비활성으로 표시하여 씬에서 일시적으로 제거할 수 있습니다. 이 작업은 스크립트에서 activeSelf 프로퍼티를 사용하여 수행하거나 인스펙터의 활성화 체크박스를 통해 수행할 수 있습니다.
게임 오브젝트 활성화 체크박스
부모 오브젝트를 비활성화하면 모든 자식 오브젝트의 activeSelf 설정도 치환되므로 부모 아래의 전체 계층 구조가 비활성화됩니다. 그래도 자식 오브젝트의 activeSelf 프로퍼티 값이 바뀌지는 _ 않으므로_, 부모가 다시 활성화되면 원래 상태로 돌아갑니다. 즉, 자식 오브젝트의 activeSelf 프로퍼티를 읽어서 해당 오브젝트가 씬에서 현재 활성 상태인지 판단할 수 없습니다. 그 대신 부모의 오버라이딩 효과를 감안하는 activeInHierarchy 프로퍼티를 사용해야 합니다.
이 오버라이드 동작은 Unity 4.0부터 도입되었습니다. 그 이전 버전에는 부모 오브젝트의 자식을 활성화하거나 비활성화하는 데 사용할 수 있는 SetActiveRecursively 함수가 있었습니다. 하지만 이 함수는 각 자식 오브젝트의 활성화 설정이 변경되었다는 점에서 작동 방식이 달랐습니다. 즉, 계층 구조 전체를 끄고 켤 수는 있었지만 자식 오브젝트의 원래 상태를 스스로 “기억”할 방법이 없었습니다. 레거시 코드와 호환성을 유지하기 위해 4.0에는 SetActiveRecursively 가 API 안에 남아 있었지만, 이 함수는 사용이 권장되지 않고 나중에 제거될 수 있습니다. 실제로 자식의 activeSelf 설정을 실제로 변경하고 싶은 특수한 경우에는 다음과 같은 코드를 사용할 수 있습니다.
// JavaScript
function DeactivateChildren(g: GameObject, a: boolean) {
g.activeSelf = a;
for (var child: Transform in g.transform) {
DeactivateChildren(child.gameObject, a);
}
}
// C#
void DeactivateChildren(GameObject g, bool a) {
g.activeSelf = a;
foreach (Transform child in g.transform) {
DeactivateChildren(child.gameObject, a);
}
}