【问题标题】:Get number of children a game object has via script通过脚本获取游戏对象拥有的孩子数量
【发布时间】:2018-02-26 00:21:04
【问题描述】:

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

【问题讨论】:

  • 您可能需要提供一些代码。到目前为止,您尝试了什么,遇到了什么问题?
  • foreach (Transform child in transform) ?

标签: c# unity3d


【解决方案1】:

编辑 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);
    }
}

假设下面是您的层次结构的样子:

用一个简单的测试脚本:

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

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

儿童人数:2

自定义儿童计数:9

正如,您可以看到 transform.childCount 不会计算子级的子级,而只会计算变换的子级。自定义函数能够计算所有子游戏对象。

【讨论】:

  • 感谢您的澄清,+1。我编辑我的答案以指定这一点。
  • @Andrea 尼斯。我真的不知道 OP 是要检查第一级还是所有孩子,但我确实相信 Unity 需要在他们的文档中澄清这一点。
  • 其他人评论的一部分,需要注意的是hierarchyCount一直是一个固定值,而childCount实际上只计算当前的孩子。如果您的 GameObject 是动态的(新元素出现或被销毁),前者将始终返回相同的值,而 childCount 将发生变化。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多