我对检查员中的拖放组件感到非常疲惫。
我想要做的是找到每个具有我用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()似乎无法正常工作。
我误解了什么吗?
答案 0 :(得分:3)
只需使用FindObjectsOfType<T>()
即可。 (是的,通用变体存在)这将为您提供某种类型的所有组件的数组。从那里你可以做任何你喜欢的事。
或者,如果您想将其限制在某个GameObject的子元素中找到的组件,您可以使用GetComponentsInChildren<T>()
。这将为您提供一个对象子级内某种类型的所有组件的数组。