I am trying to target part of a Prefab in one of my scripts. When I view the Prefab in the Project Explorer, I can “open” it to see one layer beneath, and I can click&drag these items to the inspector for use in my scripts.
For some reason, I cannot target more than 1 level down. Is this expected behavior? I tried to solve this problem programmatically, by using a GetComponentInChildren() call on one of the items that I CAN see in the project explorer, but it is returning null.
You may want to consider a recursive or nested call which checks & essentially sums each child’s components. Something like this rather inefficient extension method:
public static class MonobehaviourExtensions
{ public static T[] GetComponentsInChildrenRecursive<T> (this MonoBehaviour mb) where T: UnityEngine.MonoBehaviour
{
System.Collections.Generic.List<T> components = new System.Collections.Generic.List<T> ();
components.AddRange (mb.gameObject.GetComponents<T> ());
for(int i=0; i < mb.transform.childCount;i++){
components.AddRange(GetComponentsInChildrenRecursive<T> (mb));
}
return components.ToArray();
}
}