Может кто-то объяснить, можно ли делать так:
void Update() {
GameObject1.SetActive(IsActive);
GameObject2.SetActive(IsActive);
GameObject3.SetActive(IsActive);
}
Скрипт весит на отдельном объекте, который никогда не скрывается.
В зависимости от IsActive = true | false элемент будет скрываться или показываться.
Или придется городить всякие флаги и условия?
Вида:
if(!IsActive1) {
IsActive1 = true;
GameObject1.SetActive(IsActive);
}
Не будет ли постоянный вызов SetActive() для нескольких объектов в методе Update() пагубно сказываться на производительности?
MonoBehaviour методы вызываются только у скриптов, которые висят на "активных" (включенных GameObject). То есть когда вы сделаете объекту GameObject.SetActive(false), то метод Update() у него не будет вызываться. Об этом можно почитать в документации по GameObject.SetActive().
Кроме того, если в иерархии объектов ваш GameObject не будет верхним (то есть у него будет какой-то родительский объект), то если вы сделаете родительский объект SetActive(false), то и все дочерние элементы также будут неактивными. Соответственно и Update() у дочерних классов тоже не будет вызываться.
Сам по себе вызов SetActive() может быть дешевой операцией, если вы вызываете его для небольшого количества объектов (например для 3 как в вашей ситуации) и эти объекты просты с точки зрения иерархии (не содержат большой вложенности). Если же вы вызываете этот метод для большого числа и эти объекты сложные в плане вложенности, то это может оказать существенное влияние на производительность.
В целом, все очень сильно зависит от ситуации, так что пробуйте и профилируйте.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости