- Home /
Setting color on prefab with shader not working?
I have this prefab which contains a Plane mesh, which uses the Transparent/Diffuse shader. The texture is a gray PNG with alpha, and I want to use the shader's MainColor to colorize that PNG. In Editor, this is all well and good.
I have several instances of this prefab, and I need to change the colors of the various instances dynamically. So I get the prefab instances by name and set the color Code:
p = gameObject.Find("Plane");
if (!p)
Debug.LogError("spot plane not found");
p.renderer.material.SetColor ("_Color", scolor);
The odd thing is, it sets ONE of the instances, not all of them, and it's not always the same instance. I can replace 'scolor' with, say, Color.red, and then one of the instance will colorize. All others stay at the default color.
I would have thought that if it was altering the shader at a 'material' level, then all instances would have the new color.
What's the trick to this?
Should say: 2.6.1 Windows, decent machine
Answer by Eric5h5 · Jun 10, 2010 at 11:43 PM
GameObject.Find finds one single object. If you have more than one with the same name, which one it finds first has no guaranteed order. If you change renderer.material on an object, Unity creates a new unique scene material for you which is then used for that object. To change the material for all objects using that material, use renderer.sharedMaterial.
I thought gameObject.Find() (note the lowercase g) would search within that gameObject. Is there a way to find game objects in children (without writing my own iterator, and still, where is the 'getChild' method?)
Well I don't know about finding objects like that, but I replaced p = gameObject.Find("Plane"); with p = gameObject.Find(gameObject.name+"/Plane"); and now it works. Thanks for the tip.
Answer by Mike 3 · Jun 25, 2010 at 01:33 AM
You can use renderer.sharedMaterial instead of renderer.material if you want to manipulate them all at the same time
Your answer
Follow this Question
Related Questions
Material doesn't have a color property '_Color' 4 Answers
Problem getting prefab color 0 Answers
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Show and Hide a prefab or GameObject 10 Answers