- Home /
Getting reference to nested prefab with name "foo"
A novice question and yes I have read the GetComponent reference. However, still having a problem getting this to work.
In my hierarchy I have a prefab with a Class Script component attached. Lets call this "ParentClass".
Nested 2 levels deep in the hierarchy on the SAME prefab I have another Light prefab with name "foo"(in the hierarchy).
In the Start method for the ParentClass I have>
Light sideLight2 = gameObject.GetComponent("foo") as Light;
This doesn't work.
Can anyone tell me what I am doing wrong? Do I have to resort to GameObject.Find instead? I've read the latter is quite inefficient and should be avoided.
Answer by Baste · Aug 07, 2015 at 01:19 PM
There's a couple of points here.
First of all, GetComponent needs the type name, not the object name. So if you want a Light, you'll have to use
Light sideLight2 = GetComponent("Light") as Light;
Or, MUCH better, the generic version:
Light sideLight2 = GetComponent<Light>();
Secondly, GetComponent only finds components on the same object as the script is on. If you want to find components in child object (as "nested 2 levels deep" implies), you'll need GetComponentInChildren:
Light sideLight2 = GetComponentInChildren<Light>();
Note that GetComponentInChildren returns the first Light it finds - so if you have several Lights in the prefab hireachy, this is not a viable solution.
If that's the case, you should assign the lights in the inspector. You can do this if the light is a public field:
public Light sideLight2;
or if that breaks encapsulation for you, you get the same result by using the SerializeField attribute on a private field:
[SerializeField]
private Ligth sideLight2;
Hope that helps!
Your answer

Follow this Question
Related Questions
When adding a script using GetComponent<>(), some prefabs that are assigned don't come up 1 Answer
GetComponents error with GameObject? 3 Answers
How to get script from Object with (Clone)'s script? 2 Answers
How to pass a variable value from a script attached to a scene object to prefab? 1 Answer
Accessing a component in a Prefab 1 Answer