跟踪GameObject的子节点数

时间:2015-07-27 02:30:39

标签: c# for-loop unity3d children

我编写了这段代码来计算场景中GameObject的子代。它工作但不是最优雅的解决方案(特别是我每次将childCount重置为0的行)。有人可以给我一些重写建议,以使其更精简吗?

@Stateless

2 个答案:

答案 0 :(得分:2)

您可以在GameObject类中创建一个静态变量。每次添加或删除任何内容时,您都可以在课堂内部进行更新。这个静态变量在每个GameObject中都是一致的,并且如果在其中任何一个中进行了更改,它将被反映出来。通过提供只读属性,您可以从任何对象访问此计数。

public class GameObject
{
    private static int childrenCount = 0;
    public int ChildrenCount { get { return childrenCount; } }

    // the rest of your logic
}

答案 1 :(得分:1)

我认为您不必转发Transform,因为GameObject.transform已经返回Transform类型。并且Transform已经有Transform.childCount方法。所以你可以算这样:

public int childCount;
public void countChildren() 
{
    GameObject buildBoard = GameObject.FindGameObjectWithTag("Board");

    childCount = buildBoard.transform.childCount;

    Debug.Log(childCount);
}

你也可以把它包装成一个小帮手方法:

public int CountChildrenForObjectWithTag(string tag)
{
    var gameObject = GameObject.FindGameObjectWithTag(tag);

    if (gameObject == null || gameObject.transform == null) return 0;

    return gameObject.transform.childCount;
}