通过脚本获取游戏对象拥有的子项数

时间:2016-12-06 10:59:42

标签: c# unity3d

标题说明了一切:通过脚本找出gameObject有多少孩子的最佳方法是什么。

2 个答案:

答案 0 :(得分:4)

编辑1

简单变量transform.hierarchyCount已添加到 Unity 5.4 及更高版本中。这应该简化这一点。

Unity 5.3及以下的旧答案

Adrea提供的

transform.childCount通常是这样做的方式,但它并不会让孩子回到孩子身边。它只返回一个直接在GameObject transform.childCount下被调用的子节点。那就是它。

要返回所有子游戏对象,无论是在另一个孩子的孩子的另一个孩子的孩子下,那么你还需要做更多的工作。

以下功能可以计算儿童:

public int getChildren(GameObject obj)
{
    int count = 0;

    for (int i = 0; i < obj.transform.childCount; i++)
    {
        count++;
        counter(obj.transform.GetChild(i).gameObject, ref count);
    }
    return count;
}

private void counter(GameObject currentObj, ref int count)
{
    for (int i = 0; i < currentObj.transform.childCount; i++)
    {
        count++;
        counter(currentObj.transform.GetChild(i).gameObject, ref count);
    }
}

让我们在下面说出您的层次结构:

enter image description here

使用简单的测试脚本:

void Start()
{
    Debug.Log("Child Count: " + transform.childCount);
    int childs = getChildren(gameObject);
    Debug.Log("Child Count Custom: " + childs);
}

这是transform.childCount与自定义函数之间的结果:

  

儿童人数:2

     

儿童数量自定义:9

正如您所看到的,transform.childCount不会计算孩子的孩子,而只计算变换的孩子。自定义函数能够计算所有子GameObjects。

答案 1 :(得分:2)

您可以访问其转化并使用transform.childCount

更新:此方法适用于检索第一级的所有子项。如果要检索整个层次结构中的子项(也在更深层次),请按照程序员的回答。