Unity查找子项的变换组件与遍历父项的变换

时间:2015-12-08 09:01:31

标签: unity3d lambda unity5

因此我的想法是,我希望使用我自己的名为GameObject的方法获取具有特定标记的GameObject,该标记是FindChildWithTag()的子级。下面有两种不同的方法,我相信它们也有类似的目的。

第一

void GameObject FindChildWithTag(string tag)
{
    GameObject temp = GetComponentsInChildren<Transform>().
        Select(x => x.gameObject).
        FirstOrDefault(x => x.tag == tag && x != transform);

    return temp;
}

SECOND

void GameObject FindChildWithTag(string tag)
{
    foreach (Transform item in transform)
    {
        if (item.tag == tag)
        {
            return item.gameObject;
        }
    }

    return null;
}

但奇怪的是,当第一个返回null时,第二个返回正确。

知道我的错在哪里?因为我的想法告诉那两个方法有共同的目标。

谢谢。

1 个答案:

答案 0 :(得分:0)

脚本之间的主要区别在于,第二个脚本只查找您正在搜索的Transform的子项。 (深度1)第一个使用GetComponentsInChildren搜索所有孩子,即使有更深的深度。

在我的测试用例中,如果有正确标记的孩子enter image description here

,两者都会返回正确的对象

在第二个测试用例中,只有第一个脚本返回对象,第二个脚本返回null enter image description here