我无法相信这个问题还没有被问过;一个相当彻底的谷歌搜索没有结果。 Unity文档说明了Behaviour.isActiveAndEnabled
字段:
是否已启用行为已启用 启用行为时为True,禁用时为false。
它说的是Behaviour.enabled
:
启用行为已更新,禁用行为不是。
这显示为行为检查器中的小复选框。
因此,有一篇文章详细阐述了“启用”意味着什么比另一种意味着更多。据我所知,这些字段在完全相同的条件下是真/假的!那么区别是什么呢?你什么时候用一个而不是另一个?非常感谢澄清!
答案 0 :(得分:14)
isActiveAndEnabled
和enabled
似乎让初学者感到非常困惑,我打赌大多数人仍然不知道差异以及何时使用每个人。我是其中一个人。
要理解两件事:
A .GameObjects可以激活和取消激活。
B 。脚本可以启用和禁用。
isActiveAndEnabled
中的关键字应该解释一切。
每个属性会发生什么:
1 。对于Behaviour.enabled
,这是真值表:
GameObject
脚本已激活或已停用 {{}> 不重要1}}返回 true 。重要的是,如果启用或禁用了附加到GameObject的脚本或组件。
2 。对于Behaviour.enabled
,这是真值表:
Behaviour.isActiveAndEnabled
启用或禁用GameObject
以返回true或false,则 重要。要使Behaviour.isActiveAndEnabled
返回Behaviour.isActiveAndEnabled
,两者脚本/组件所附加的GameObject必须活动且脚本必须为启用。如果其中任何一项为假,则true
将返回Behaviour.isActiveAndEnabled
。
修改强>:
您希望何时获得
false
而不是enabled
?
使用isActiveAndEnabled
检查脚本是否启用/禁用。您还可以使用它来启用或禁用脚本。根据您的游戏逻辑,有时您可以禁用/启用脚本。例如,当一个GameObject在屏幕上不再可见但你有一个脚本附加在enabled
函数中进行大量计算时,你可以在启用时禁用该脚本,并在GameObject稍后再启用它是可见的。
Update()
是只读的。您只能使用它来检查两者脚本是否为isActiveAndEnabled
,而 GameObject 是否附加到enabled
。您无法使用它来启用或激活GameObject。
active
是if (myScriptInstance.isActiveAndEnabled)
的简写,但if (myScriptInstance.gameObject.activeSelf && myScriptInstance.enabled)
使您的代码更短,更易于阅读。
在GameObject.activeInHierarchy和Behaviour.enabled之间,有一个 需要检查状态的所有信息。
不是真的。这些是使用Unity时肯定需要的非常不同的变量。我不认为您了解isActiveAndEnabled
的用途。要检查GameObject是否处于活动状态,请使用GameObject.activeInHierarchy
而不是GameObject.activeSelf
。要激活/停用GameObject,请使用GameObject.activeInHierarchy
3 。 GameObject.activeInHierarchy以及何时使用:
对于下表, pObj = Parent GameObject 和 cObj = Child GameObject ,并且正在对Child GameObject执行GameObject.activeInHierarchy。
GameObject.SetActive(true/false);
几乎就像GameObject.activeInHierarchy
。它取决于两件事isActiveAndEnabled
。父GameObject必须处于活动状态。正在执行检查的GameObject(Child)也必须处于活动状态。如果其中任何一项为假,则true
将返回GameObject.activeInHierarchy
。
您使用false
检查提供的GameObject是否处于活动状态,同时检查其所有父项是否也处于活动状态。如果GameObject没有父级,则只需使用GameObject.activeInHierarchy
。 GameObject.activeSelf
仅检查GameObject是否处于活动状态。它不会像GameObject.activeSelf
那样检查父级。
答案 1 :(得分:3)
我知道这是误导性的:
Behaviour.isActive 和已启用=已启用行为已启用。
为了激活已启用的行为,其游戏对象必须处于活动状态且必须启用行为本身。
Behaviour.enabled =已启用行为已更新
要更新行为,必须选中该复选框。但是,如果游戏对象没有激活,则无法更新,因此无法更新其附加行为。
行为。 isActiveAndEnabled: 组件已启用& 游戏对象有效
行为。启用: 组件已启用& 游戏对象可能处于有效状态或已停用
GameObject。 activeSelf: 游戏对象处于有效状态
GameObject。 activeInHierarchy: 游戏对象及其所有父级处于活动状态
答案 2 :(得分:1)
除了其他答案外,IsActiveAndEnabled似乎还检查GameObject是否在其层次结构中处于活动状态(例如IsActiveInHierarchy),而不仅仅是检查GameObject是否处于活动状态(例如activeSelf)。这不是在Unity文档中编写的。以下是所有州的真相表。
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
| Component.enabled | GameObject.activeSelf | Parent GameObject.activeSelf | GameObject ActiveInHierarchy | Component isActiveAndEnabled |
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
| TRUE | TRUE | TRUE | TRUE | TRUE |
| FALSE | TRUE | TRUE | TRUE | FALSE |
| TRUE | FALSE | TRUE | FALSE | FALSE |
| FALSE | FALSE | TRUE | FALSE | FALSE |
| TRUE | TRUE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | FALSE | FALSE |
| TRUE | FALSE | FALSE | FALSE | FALSE |
| FALSE | FALSE | FALSE | FALSE | FALSE |
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
答案 3 :(得分:0)
我注意到,当没有调用Awake事件时,isActiveAndEnabled为false。