- Home /
Targeting parts of a Prefab more than 1 level down?
Hello,
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.
Please advise, thanks so much!
I'm sure you know this, but just in case ..when you drag your prefab to scene (hierarhcy view) you get all childs, and you can edit them and if needed, also apply changes (inspector, prefab, apply)
Answer by Barbog · Aug 21, 2013 at 02:28 PM
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();
}
}
Your answer
Follow this Question
Related Questions
Reference to Scene Object Component in Prefab Editor, 'Type Mismatch'? 1 Answer
Editor: Is it possible to move a component of a Prefab Gameobject Child to it's parent?? 1 Answer
How to check if a component is on an instantiated prefab? 1 Answer
Why do prefabbed meshes go missing whenever I pull an update from Unity Collab? 0 Answers
How Mark Prefab Dirty? 1 Answer