publicstatic T[] MyFindObjectsOfType<T>() where T : Component { Scene scene = SceneManager.GetActiveScene(); GameObject[] roots = scene.GetRootGameObjects(); List<T> objects = new List<T>(); for (int i = 0; i < roots.Length; i++) { /* 如果之前获取过该组件,就不再获取 */ if (roots[i].TryGetComponent(out T component)) { objects.Add(component); } GetObjectsByType<T>(roots[i].transform, ref objects); } return objects as T[]; } staticvoidGetObjectsByType<T>(Transform transform, ref List<T> objects) where T : Component { if (transform.childCount == 0) return; Transform curChild; for (int i = 0; i < transform.childCount; i++) { curChild = transform.GetChild(i); /* 如果之前获取过该组件,就不再获取 */ if (curChild.TryGetComponent(out T component)) { objects.Add(component); } GetObjectsByType<T>(curChild, ref objects); } }