【发布时间】:2018-02-26 00:21:04
【问题描述】:
标题说明了一切:通过脚本找出gameObject 有多少孩子的最佳方法是什么。
【问题讨论】:
-
您可能需要提供一些代码。到目前为止,您尝试了什么,遇到了什么问题?
-
foreach (Transform child in transform)?
标题说明了一切:通过脚本找出gameObject 有多少孩子的最佳方法是什么。
【问题讨论】:
foreach (Transform child in transform) ?
编辑 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 不会计算子级的子级,而只会计算变换的子级。自定义函数能够计算所有子游戏对象。
【讨论】:
hierarchyCount一直是一个固定值,而childCount实际上只计算当前的孩子。如果您的 GameObject 是动态的(新元素出现或被销毁),前者将始终返回相同的值,而 childCount 将发生变化。
您可以访问其转换并使用transform.childCount。
更新:此方法适用于检索第一级的所有子级。如果您想检索整个层次结构中的子级(也在更深的级别),请按照程序员的回答。
【讨论】: