Unity 自身与父对象的Active状态

ActiveSelf

 Unity 获得自身 Active 属性的时候可以用 gameObject.activeSelf 来获得,注意这是获取自身的 Active 属性

 假如该物体的父对象在层级面板上是关闭的状态,获取到的 ActiveSelf 属性仍然是 True

 那么如果想获得这个物体的父对象状态来表示他自己的状态时就需要用到 ActiveInHierarchy

ActiveInHierarchy

 ActiveInHierarchy 是获取到父对象层级面板的状态

 如果没有父对象的话,则 ActiveSelf 和 ActiveInHierarchy 的值是相等的

Test

 测试1:层级关系为1,单一父对象

 1     public GameObject Obj;
 2 
 3     void Update()
 4     {
 5         if (Input.GetKeyDown(KeyCode.Q))
 6         {
 7             Debug.Log("activeInHierarchy的属性为:" + Obj.activeInHierarchy);
 8         }
 9         if (Input.GetKeyDown(KeyCode.E))
10         {
11             Debug.Log("activeSelf的属性为:" + Obj.activeSelf);
12         }
13     }

 如图,将作为父对象的 Cube 对象关闭

 Unity 自身与父对象的Active状态

 测试结果:

 Unity 自身与父对象的Active状态

 测试2:层级关系大于1,多个父对象

 将 Cube1 设为 False,Cube4 设为 True

 Unity 自身与父对象的Active状态

 测试结果:

 Unity 自身与父对象的Active状态

 接着将 Cube1 设为 True,Cube4 设为False 进行测试:

 Unity 自身与父对象的Active状态

 最后将所有父对象的 Cube 都设为 True 进行测试:

 Unity 自身与父对象的Active状态

结论

 只要目标对象的层级关系父对象中存在 False,则 ActiveInHierarchy 只能为 False

 只有目标对象的所有父对象都为 True 的情况下 ActiveInHierarchy 才会为 True

 而 ActiveSelf 的结果只与自身有关,与父对象无关

*** |  以上内容仅为学习参考、学习笔记使用  | ***