Update и открытые методы

90
27 октября 2021, 13:40

Может кто-то объяснить, можно ли делать так:

void Update() {
    GameObject1.SetActive(IsActive);
    GameObject2.SetActive(IsActive);
    GameObject3.SetActive(IsActive);
}

Скрипт весит на отдельном объекте, который никогда не скрывается.
В зависимости от IsActive = true | false элемент будет скрываться или показываться.
Или придется городить всякие флаги и условия?

Вида:

if(!IsActive1) {
   IsActive1 = true;
   GameObject1.SetActive(IsActive);
}

Не будет ли постоянный вызов SetActive() для нескольких объектов в методе Update() пагубно сказываться на производительности?

Answer 1

MonoBehaviour методы вызываются только у скриптов, которые висят на "активных" (включенных GameObject). То есть когда вы сделаете объекту GameObject.SetActive(false), то метод Update() у него не будет вызываться. Об этом можно почитать в документации по GameObject.SetActive().

Кроме того, если в иерархии объектов ваш GameObject не будет верхним (то есть у него будет какой-то родительский объект), то если вы сделаете родительский объект SetActive(false), то и все дочерние элементы также будут неактивными. Соответственно и Update() у дочерних классов тоже не будет вызываться.

Сам по себе вызов SetActive() может быть дешевой операцией, если вы вызываете его для небольшого количества объектов (например для 3 как в вашей ситуации) и эти объекты просты с точки зрения иерархии (не содержат большой вложенности). Если же вы вызываете этот метод для большого числа и эти объекты сложные в плане вложенности, то это может оказать существенное влияние на производительность.

В целом, все очень сильно зависит от ситуации, так что пробуйте и профилируйте.

READ ALSO
Вывод данных из БД в DataGridView

Вывод данных из БД в DataGridView

не смог найти тему с ответом на мой вопросЕсть база данных на локальном сервере MySql

131
Сonversion failed when converting date and or/time from a character to string c# Помогите Решить [дубликат]

Сonversion failed when converting date and or/time from a character to string c# Помогите Решить [дубликат]

Никак не могу решить проблему с конверсиейВ БД значение столбцов : date и time, использую DateTimePicker в WinForms и создаю новые переменные в которые записываю...

112
Валидация кода на C#

Валидация кода на C#

Есть файлы расширения cs, которые генерируются утилитойМне необходимо программно проверять на корректность сгенерируемые файлы программно

124
Где Word хранит свои картинки?

Где Word хранит свои картинки?

В общем, есть много Word'ов, которые я обрабатываю через interop и пытаюсь вытянуть картинки, что бы их сохранить отдельно

85