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>()
。这将为您提供一个对象子对象中某种类型的所有组件的数组。
在检查器中拖放组件让我感到非常疲惫。
我想做的是找到每个具有我用 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>()
。这将为您提供一个对象子对象中某种类型的所有组件的数组。