GetComponents and GetComponentsInChildren and GetComponentsInParent have these overloads available: Code (csharp): public void GetComponentsInParent<T>(bool includeInactive, List<T> results); public void GetComponentsInChildren<T>(bool includeInactive, List<T> result); public void GetComponents<T>(List<T> results); //also this one, for when you hate writing good code: public void GetComponents(Type type, List<Component> results); None of these methods are mentioned anywhere in the docs. Doing a quick check, it seems like the methods clear the provided list, and then put the results in it. It seems like this is meant as a gc-free alternative to GetComponents (yay!). Using a List<T> instead of an array with an int return that defines the count of elements also makes this a much better solution to the gc problem than eg. Physics.RaycastAll and NavMeshPath.GetCornersNonAlloc! It'd be nice to have clear docs on what the method does, though!