如何从孩子那里获得孙子(C#UNITY)

时间:2018-06-28 06:50:14

标签: c# unity3d

我怎样才能让孩子的孙子们团结起来

这是我的阶层结构

enter image description here

我尝试这样做

public Transform[] trans;

trans = GetComponentsInChildren<Transform>();

foreach(Transform gc in trans)
{
    //this could only get the first layer.
}

我的脚本在ScrollView GameObject中

编辑:

Transform grid_gametable;
// Use this for initialization
void Start()
{
    sp = sv.GetComponent<SpringPanel>();
    if (sp == null) sp = sv.AddComponent<SpringPanel>();

    sp.target.x = 0;
    sp.target.y = 0;
    sp.target.z = 0;

    StartCoroutine("ItemCheck");

}


IEnumerator ItemCheck()
{
    grid_gametable = transform.Find("Grid_gametable");

    for (int i = 0; i < grid_gametable.childCount; i++)
    {
        Debug.Log("How many: " + grid_gametable);
    }
    yield return null;
}

计数不起作用很奇怪。

2 个答案:

答案 0 :(得分:3)

由于脚本已附加到ScrollView,因此可以使用transform.Find首先找到“ Grid_gametable”子级。之后,遍历该“ grid_gametable”子对象以获取其所有“ prefab_Gametable_baccarat”子对象。

Transform grid_gametable = transform.Find("Grid_gametable");

foreach (Transform gc in grid_gametable)
{
    Debug.Log(gc.name);
}

此外,“ grid_gametable”是“ ScrollView”的第一个子代。您还可以使用transform.GetChild(0)而不是transform.Find来查找“ grid_gametable”,然后循环其子级。

Transform grid_gametable = transform.GetChild(0);

foreach (Transform gc in grid_gametable)
{
    Debug.Log(gc.name);
}

答案 1 :(得分:0)

我不确定您想要的是什么,所以我假设您想要做的是:如果您将层次结构想象成一棵树,您想找到树的每片叶子吗?我们可以通过典型的图形搜索来做到这一点。我在这里使用广度优先搜索。

public static List<Transform> FindAllLeaves(Transform transform)
{
    var transforms = new List<Transform>();
    var queue = new Queue<Transform>();

    queue.Enqueue(transform);

    while(queue.Count > 0)
    {
        var t = queue.Dequeue();
        if(transform.childCount > 0)
        {
            foreach (Transform child in t.GetComponentsInChildren<Transform>())
            {
                queue.Enqueue(child);
            }
        } else
        {
            transforms.Add(t);
        }
    }
    return transforms;
}

这是您要实现的目标吗?