Unity3d_基础之GameObject.activeSelf,.activeInHierarchy,.SetActive的区别和关联

Unity API

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值