跟踪游戏对象的子元素数量

本文关键字:元素 游戏 对象 跟踪 | 更新日期: 2023-09-27 18:04:42

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

public int childCount;
public void countChildren() 
{
    GameObject buildBoard = GameObject.FindGameObjectWithTag("Board");
    GameObject[] allChildren = buildBoard.transform.Cast<Transform>().Select(t=>t.gameObject).ToArray();
    childCount = 0;
    for(int i = 0; i < allChildren.Length; i++)
    {
        childCount++;
    }
    Debug.Log(childCount);
}

跟踪游戏对象的子元素数量

你可以在GameObject类中创建一个静态变量。每次添加或删除任何内容时,只需在类内部更新即可。这个静态变量将在每个游戏对象中保持一致,如果其中任何一个对象发生变化,它将被反映出来。通过提供只读属性,您可以从任何对象访问此计数。

public class GameObject
{
    private static int childrenCount = 0;
    public int ChildrenCount { get { return childrenCount; } }
    // the rest of your logic
}

我认为您不必强制转换为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;
}