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

Unity/C# Find object which have generic component

在检查器中拖放组件让我感到非常疲惫。

我想做的是找到每个具有我用 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。它无法过滤并且 'temp' 始终不为空。

T temp = trans.gameObject.GetComponent() 似乎不符合我的意思。

我是不是误会了什么?

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

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