繁体   English   中英

跟踪GameObject的子代数

[英]Keeping track of the number of Children of a GameObject

我编写了这段代码来计算场景中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类中创建一个静态变量。 每次添加或删除任何内容时,您都可以在班级内部对其进行简单更新。 此静态变量将在每个GameObject上保持一致,并且如果对其中的任何一个进行了更改都将反映出来。 通过提供只读属性,您可以从任何对象访问此计数。

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

    // the rest of your logic
}

我认为您不必GameObject.transform TransformTransform因为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM