Разница между enabled, isActiveAndEnabled и activeInHierarchy в единстве
Я не могу поверить, что этот вопрос еще не был задан где-то; довольно тщательный поиск в Интернете не дал никаких результатов. В документации Unity говорится об этом Behaviour.isActiveAndEnabled
3 ответов
isActiveAndEnabled
и enabled
кажется очень запутанным для начинающих и я уверен, что большинство людей все еще не знают разницы и когда использовать каждый из них. Я был одним из этих людей.
две вещи понять:
A.GameObjects может быть активирован и де-активирован.
B.Скрипты могут быть включено и отключен.
ключевое слово в isActiveAndEnabled
это все объясняет.
что происходит с каждым свойством:
1.Для Behaviour.enabled
, Это таблица истинности:
- GameObject = активный и Script = включено затем поведение.включенный= истинный.
- GameObject = активный и Script = отключен затем поведение.включенный= ложный.
- GameObject = неактивные и скрипт = включено затем поведение.включенный= истинный.
- GameObject = неактивные и Script = отключен затем поведение.включенный= ложный.
это не дело, если GameObject
скрипт прикреплен к is активирован или деактивирован на Behaviour.enabled
вернуться правда. Имеет значение, включен ли скрипт или компонент, подключенный к GameObject, или нетрудоспособный.
2.Для Behaviour.isActiveAndEnabled
, это таблица истинности:
- GameObject = активный и Script = включено затем isActiveAndEnabled = истинный.
- GameObject = активный и Script = отключен затем isActiveAndEnabled = ложный.
- GameObject = неактивные и Script = включено затем isActiveAndEnabled = ложный.
- GameObject = неактивные и Script = отключен затем isActiveAndEnabled = ложный.
это вопросы если GameObject
включено или отключено для Behaviour.isActiveAndEnabled
возвращает true или false. Для того, чтобы Behaviour.isActiveAndEnabled
вернуться true
, и GameObject скрипт / компонент прилагается к должен быть активный и сценарий должен быть включено. Если все это ложь, тогда Behaviour.isActiveAndEnabled
вернутся false
.
редактировать:
когда бы вы хотели получить
enabled
, а неisActiveAndEnabled
?
вы используете enabled
чтобы проверить, если скрипт включен/отключен. Вы также можете использовать его для включения или отключения скрипта. В зависимости от логики игры, бывают случаи, когда вы отключаете/включаете скрипт. Например, когда GameObject больше не отображается на экране, но к нему прикреплен один скрипт, который выполнение тяжелых вычислений в Update()
функция, вы можете отключить этот скрипт с включенным и включить его позже, когда GameObject будет виден.
isActiveAndEnabled
доступно только для чтения. Вы можете использовать его только для проверки, если и скрипт enabled
и GameObject он прикреплен к active
. Вы не может используйте его для включения или активации GameObject.
if (myScriptInstance.isActiveAndEnabled)
это короткая рука для if (myScriptInstance.gameObject.activeSelf && myScriptInstance.enabled)
но isActiveAndEnabled
делает ваш код короче и легче читать.
Между GameObject.activeInHierarchy and Behaviour.включен, одно есть вся информация, необходимая для проверки состояния.
не совсем так. Это очень разные переменные, которые вам обязательно понадобятся при использовании Unity. Я не думаю, что вы понимаете, что GameObject.activeInHierarchy
используется для. Чтобы проверить, активен ли GameObject, используйте GameObject.activeSelf
не GameObject.activeInHierarchy
. Для активации / деактивации GameObject используйте GameObject.SetActive(true/false);
3.GameObject.activeInHierarchy и когда его использовать:
в таблице pObj = Родительский GameObject и cObj = Child GameObject и этот GameObject.activeInHierarchy выполняется на дочернем GameObject.
- pobj по = активный и cObj = активный затем GameObject.activeInHierarchy = истинный.
- pobj по = активный и cObj = неактивные затем GameObject.activeInHierarchy = ложный.
- pobj по = неактивные и cObj = активный затем GameObject.activeInHierarchy = ложный.
- pobj по = неактивные и cObj = неактивные затем ' GameObject.activeInHierarchy = ложный.
GameObject.activeInHierarchy
почти как isActiveAndEnabled
. Это зависит от двух вещей, чтобы быть true
. Родитель Объект должен быть активным. GameObject (Child), на котором выполняется проверка, также должен быть активным. Если все это ложь, то GameObject.activeInHierarchy
вернутся false
.
вы используете GameObject.activeInHierarchy
чтобы проверить, активен ли предоставленный GameObject, и в то же время проверить, активны ли все его родители. Если у GameObject нет родителя, просто используйте GameObject.activeSelf
. GameObject.activeSelf
будет только проверять, активен ли GameObject или нет. Он не будет проверять родителя, как GameObject.activeInHierarchy
.
Я знаю, что это вводит в заблуждение:
поведение.метод isactiveиEnabled = поведение было включено вызывается.
для того, чтобы поведение было включено, его игровой объект должен быть активным, и само поведение должно быть включено.
поведение.включено = включено поведение обновляется
для обновления поведения необходимо установить флажок. однако, если объект игры не активен, то он не может быть обновлен, поэтому его прикрепленное поведение не может быть обновлено.
короче:
поведение.isActiveAndEnabled: компонент включен & объект игры
поведение.включено: компонент включен & игровой объект может быть активен или деактивирован
GameObject.activeSelf: объект игры
GameObject.activeInHierarchy: цель игры и все ее родители активны