Unity / C#查找具有通用组件的对象

时间:2015-06-26 12:36:54

标签: c# unity3d unityscript

我对检查员中的拖放组件感到非常疲惫。

我想要做的是找到每个具有我用T

选择的组件的对象
void GetAllGameObjectWhichHave<T>(ref int cnt, GameObject[] f_array, GameObject transformForSearch)
{

    foreach (Transform trans in transformForSearch.transform)
    {
        GetAllGameObjectWhichHave<T>(ref cnt, f_array, trans.gameObject);

        T temp = trans.gameObject.GetComponent<T>();

        if (temp != null && cnt < f_array.Length)
        {
            f_array[cnt++] = trans.gameObject;
        }
    }
}

我用过这样的

//OnAwake()
GetAllGameObjectWhichHave<Rigidbody2D>(ref zeroInt, enoughArray, TopHierarchyObj);

这个递归函数获取每个游戏对象并将它们保存在f_array中。它无法过滤和“临时”。总是不是空的。

T temp = trans.gameObject.GetComponent()似乎无法正常工作。

我误解了什么吗?

1 个答案:

答案 0 :(得分:3)

只需使用FindObjectsOfType<T>()即可。 (是的,通用变体存在)这将为您提供某种类型的所有组件的数组。从那里你可以做任何你喜欢的事。

或者,如果您想将其限制在某个GameObject的子元素中找到的组件,您可以使用GetComponentsInChildren<T>()。这将为您提供一个对象子级内某种类型的所有组件的数组。