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:
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
asked Jun 10, 2010 at 11:32 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.
answered Jun 10, 2010 at 11:43 PM
You can use renderer.sharedMaterial instead of renderer.material if you want to manipulate them all at the same time
answered Jun 25, 2010 at 01:33 AM