Отключение Игрового Объекта позволяет временно убрать его со сцены. Для этого можно воспользоваться activeSelf свойством через скрипт, также можно использовать “галочку” активации в инспекторе
“Галочка” активации Игрового Объекта
Если родительский объект деактивирован, его отключение также перезаписывает опцию activeSelf у всех его дочерних элементов, то есть вся иерархия объектов, от родителя до каждого его потомка, становится неактивной. Однако этот процесс не меняет значения свойства activeSelf у дочерних элементов, они вернутся в первоначальное состояние, как только родитель будет снова активирован. Это значит, что нельзя судить, активирован ли в данный момент объект на сцене, по его свойству activeSelf. Вместо него, нужно использовать свойство activeInHierarchy, которое принимает во внимание эффект перезаписывания от родителя.
Такое перезаписывающее поведение впервые появилось в Unity 4.0. В предыдущих версиях была функция под названием SetActiveRecursively, которую можно было использовать, чтобы активировать или деактивировать потомков данного родительского объекта. Однако эта функция отличалась тем, что параметр активации каждого потомка изменялся - можно было включать или отключать всю иерархию, но потомок не имел возможности “запомнить”, в каком состоянии он был изначально. Чтобы код предыдущих версий продолжал работать, SetActiveRecursively осталась и в API к 4.0, но использовать ее не рекомендуется, функция может быть исключена из API в будущем:-
// 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);
}
}