首页 > 解决方案 > 为什么函数没有递归地返回所有的孩子?

问题描述

void Start()
{
    var allchildren = AddDescendantsWithTag(transform);
}

private List<GameObject> AddDescendantsWithTag(Transform parent)
{
        List<GameObject> list = new List<GameObject>();

        foreach (Transform child in parent)
        {
            list.Add(child.gameObject);
            AddDescendantsWithTag(child);
        }

        return list;
}

但它只返回父级下第一级的子级。

我想深入到最后。

脚本附加到 transform 并且 transform 也是父级。

标签: c#unity3d

解决方案


您正在反复分配一个新列表,然后将其丢弃。您可能只想分配一个列表并添加到它。尝试这个:

void Start()
{
    var allchilds = new List<GameObject>();
    AddDescendantsWithTag(transform, allchilds);
}

private void AddDescendantsWithTag(Transform parent,  List<GameObject> list)
{
    foreach (Transform child in parent)
    {
        list.Add(child.gameObject);
        AddDescendantsWithTag(child, list);
    }
}

推荐阅读