您如何检查 Unity 中 parent 中哪些 children 处于活动状态?

How can you check which children are active within a parent in Unity?

我在 "Cameras" parent:

下有一个摄像头列表

在我的游戏中,我想将角色的相对性设置为处于活动状态的摄像机。例如,如果 Camera012 处于活动状态,则将角色的控件设置为相对于 Camera012。但是,我不知道如何通过 parent object 检查哪些 children 处于活动状态。

if (Camera002.activeInHierarchy) {
// do something
}

如果需要,可以将所有摄像头添加到一个数组中,然后使用 for 循环检查每个摄像头

如果你只要求 children 活跃的很容易,如果你只想要一个 child 一次添加一个 sciprt 到相机 object 其中包括

Camera firstactiveCamera = GetComponentInChildren<Camera>();

这将 return 仅第一个活动相机

如果你想找到 children 中所有活动的相机,那么它会返回一个数组。

Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>();

不同之处在于这是复数(组件),因此您可以在 children 中获得所有活动相机 object。

即使你想在 children 中停用 objects,你也可以使用

Camera[] activeCamerasInChildren = GetComponentsInChildren<Camera>(true);

如果您使用函数 getcomponent 发送 true,它甚至会在数组中找到不活动的 objects 和 return。

GetComponentsInChildren 的缺点(如 所建议)是它 returns 最终进一步嵌套 children 并且不只查看第一层 child仁.

activeInHierarchy(建议)returns只有true,如果所有parent in the Hierarchy of the examused object也很活跃。


通常您可以使用

遍历游戏对象的所有第一层 children
foreach(Transform child in someGameObject.transform)
{
    // use child
}

并使用

检查 child 是否处于活动状态
// the object to examine the childs of
Transform parent;

// iterate through all first level children
foreach(Transform child in parent)
{
    if(child.gameObject.activeSelf)
    {
        Debug.Log($"The child {child.name} is active!");
    }
    else
    {
        Debug.Log($"The child {child.name} is inactive!");
    }
}

如果 object 层次结构中的任何 parent 处于非活动状态但 child 本身处于活动状态,这也适用。

public GameObject gameobject_I want to know;

print(gameobject_I want to know.transform.GetComponentsInChildren<Transform>().Length);