我不敢相信这个问题尚未在某个地方问过。相当彻底的Google搜寻没有结果。Unity文档对此内容进行了说明Behaviour.isActiveAndEnabled
:
是否已启用行为调用。
启用行为时为true,禁用行为为false。
启用行为已更新,禁用行为未更新。
这在行为检查器中显示为小复选框。
因此,一篇文章只是阐述了“ Enabled”比另一篇文章更有意义。据我所知,这些字段在完全相同的条件下为true / false!那么区别是什么呢?您什么时候可以使用另一个?澄清将不胜感激!
isActiveAndEnabled
和enabled
似乎很混乱初学者和我敢打赌,大多数人仍然不知道其中的差别,以及何时使用各一个。我就是其中之一。
有两件事要理解:
一个 .GameObjects可以激活和去激活。
B。脚本可以启用和禁用。
关键字in isActiveAndEnabled
应该说明了一切。
每个属性会发生什么:
1。对于Behaviour.enabled
,这是真理表:
这不,如果此事GameObject
脚本连接到被激活或停用的Behaviour.enabled
返回真。重要的是是否启用或禁用了附加到GameObject的脚本或组件。
2。对于Behaviour.isActiveAndEnabled
,这是真理表:
它重要,如果GameObject
被启用或禁用的Behaviour.isActiveAndEnabled
返回true或false。为了Behaviour.isActiveAndEnabled
返回true
,必须将脚本/组件所附的GameObject 都激活并且必须启用脚本。如果其中任何一个为假,Behaviour.isActiveAndEnabled
则将返回false
。
编辑:
您什么时候想得到
enabled
而不是isActiveAndEnabled
?
您用于enabled
检查脚本是否启用/禁用。您也可以使用它来启用或禁用脚本。根据您的游戏逻辑,有时会禁用/启用脚本。例如,当某个GameObject在屏幕上不再可见,但是您附加了一个脚本,该脚本正在Update()
函数中进行大量计算时,您可以禁用已启用的脚本,并在以后可见该GameObject时重新启用它。
isActiveAndEnabled
是只读的。你只能用它来检查,如果这两个剧本enabled
和游戏对象它是连接到active
。您不能使用它来启用或激活GameObject。
if (myScriptInstance.isActiveAndEnabled)
是它的简写,if (myScriptInstance.gameObject.activeSelf && myScriptInstance.enabled)
但isActiveAndEnabled
会使您的代码更短且更易于阅读。
在GameObject.activeInHierarchy和Behaviour.enabled之间,一个拥有检查状态所需的所有信息。
并不是的。在使用Unity时,您肯定需要这些完全不同的变量。我认为您不了解GameObject.activeInHierarchy
它的用途。要检查GameObject是否处于活动状态,请使用GameObject.activeSelf
not GameObject.activeInHierarchy
。要激活/停用GameObject,请使用GameObject.SetActive(true/false);
3。GameObject.activeInHierarchy以及何时使用它:
对于下表,pObj =父GameObject,cObj =子GameObject,并且正在对子GameObject执行GameObject.activeInHierarchy。
GameObject.activeInHierarchy
几乎像isActiveAndEnabled
。这要取决于两件事true
。父GameObject必须处于活动状态。被执行检查的GameObject(Child)也必须处于活动状态。如果其中任何一个为假,GameObject.activeInHierarchy
则将返回false
。
您可以GameObject.activeInHierarchy
用来检查提供的GameObject是否处于活动状态,并同时检查其所有父对象是否也处于活动状态。如果GameObject没有父对象,则只需使用GameObject.activeSelf
。GameObject.activeSelf
只会检查GameObject是否处于活动状态。不会像那样检查父母GameObject.activeInHierarchy
。
感谢您的彻底回答!这几乎就是我认为它起作用的方式,我只是不明白为什么Unity有这个领域。在
GameObject.activeInHierarchy
和之间Behaviour.enabled
,拥有一个需要检查状态的所有信息。我想isActiveAndEnabled
它更短/更干净,但是他们从语法糖中获得的东西我觉得他们在API清晰度方面失去了...我想我现在的问题是,什么时候您想得到
enabled
而不是isActiveAndEnabled
?似乎enabled
只应用于设置而不是获取。在我回答之前,我有一个问题要问您。您知道GameObject与脚本/组件之间的区别吗?
哈哈是的。不知道我该如何说服您,但是我已经在托管插件中编写了数千行C#代码,所以是的,我很了解其中的区别:P您将Components附加到GameObjects
大声笑,问这个问题我感到很恐怖,但我只是想确保您对Unity并不陌生,并且对两者都了解。我将编辑答案以回答该问题。