UNITYDEV

Реклама на проекте

Тямпуру! Отборный контент для хорошего настроения!

Деактивация игровых объектов

 

Деактивация игровых объектов

Маленькая тонкость при деактивации игровых объектов.

статьи, от 19 июня 2013г.

Любой игровой объект может быть временно удален из сцены путем его деактивации. Самый простой способ это сделать - убрать галочку напротив имени объекта в инспекторе:

Деактивация GameObject в инспекторе

Эффект при деактивации родителя

Стоит отдельно отметить ситуацию, когда мы деактивируем GameObject, у которого есть потомки ниже по иерархии. Дело в том, что в таком случае, все они тоже становятся неактивными, однако, у потомков, в отличие от родителя, свойство activeSelf не будет изменено. То есть, обращаясь к GameObject-у потомку мы можем столкнуться с ситуацией, когда значение activeSelf у него true, но тем не менее, он не активен, из-за того что какой-то предок был деактивирован. В этом случае нам нужно проверять другое свойство activeInHierarchy, которое будет изменяться, при деактивации одного из предков.

Свойство activeInHierarchy было введено в Unity начиная с версии 4.0. До этого состояние дочерних объектов не сохранялось, а изменялось свойство activeSelf у всех предков. Проблема тут очевидна, для ее иллюстрации представим следующую иерархию объектов: объект a, у которого есть предок b, у которого в свою очередь есть предок c. Пусть объект c на конце цепочки не активный. Тогда, если объект a изменит свое состояние на "неактивный" (свойства activeSelf у всех объектов цепочки станет false), а затем вернется в исходное состояние, то свойство activeSelf у всей цепочки станет true. А это значит, что c, который изначально отсутствовал в сцене, снова появится. Во многих игровых ситуациях такое поведение иерархии объектов просто не приемлемо.

Для изменения состояния цепочки объектов ранее использовалась функция SetActiveRecursively. Теперь она помечена как deprecated и вероятно будет в будущем удалена из API. Воздержитесь от ее использования в своих проектах.

Комментарии

Комментариев пока нет, будьте первыми!

 

Начать новую ветвь обсуждений

Войти / зарегистрироваться