GameObject. activeInHierarchy
Defines whether the GameObject is active in the Scene.
定义了这个游戏对象在场景中是否可见.
表示物体在层次中是否是active的. 也就是说要使这个值为true.
这个物体及其所有父物体(及祖先物体)的activeself状态都为true.
GameObject.activeSelf
The local active state of this GameObject. (Read Only)
表示物体本身的active状态.
对应于其在inspector中的checkbox是否被勾选.
特别注意:
一个物体要在场景中是可见的(不是隐藏的),
- 那么不仅仅其本身的activeSelf要为true,
- 其所有父物体(及祖先物体)的activeself状态都要为true.
总结
activeInHierarchy
状态代表物体在场景中的实际的active状态
- 因为物体的显示或者隐藏是通过activeSelf和其父物体的activeSelf共同决定的,必须要所有父物体的activeself状态都为true 才能显示. 而父类的activeself 可以通过自身的activeinHierarchy来判断父类是否都是activeSelf.
- 实际上代表的是物体及其所有祖先物体的activeSelf状态。
- 而activeSelf对应于其在inspector中的checkbox是否被勾选
activeSelf
状态代表物体 自身的activeSelf状态
- 所以当物体本身activeSelf为true,而其所有祖先物体的activeSelf状态不全为true时,这个物体的activeInHierarchy状态为false。
activeSelf== 物体自身
activeInHierarchy== 物体自身及其所有祖先物体 ==物体在场景中实际上是否激活
SetActive 改变的是 物体自身的activeSelf状态
注意: 对一个物体SetActive时,其在场景中可能不会被激活,因为其 祖先物体 可能存在未被激活的
当一个GameObject为inactive时,其子对象的本地状态即GameObject.activeSelf其实为ture,但实际上子对象在屏幕上的状态GameObject.activeInHierarchy是false
无论子对象GameObject.activeSelf和GameObject.activeInHierarchy是什么状态
一旦其父对象状态为inactive时,它们自身便失效.
无法用GetComponentInChildren, GetComponentsInChildren和Find等方法找到,但可以用**Transform.GetChild()**的方法找到子物体.
记住GameObject.SetActive()方法改变的是自身的activeSelf和子物体的activeInHierarchy,
如果你有一个子物体的activeSelf是false,就算父物体SetActive(true),该子物体的activeSelf是不变,依旧是false。