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
p = gameObject.Find("Plane");
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
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users navigate the site we have posted a site navigation guide.
If you are a new user, check out our FAQ for more information.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
Answers and Comments
No one has followed this question yet.
Material doesn't have a color property '_Color'
Problem getting prefab color
The name 'Joystick' does not denote a valid type ('not found')
How to make a part of a texture on an object seamlessly change to another texture?
A way to iterate/enumerate shader properties?