- Home /
Check What Material is Being Used?
Hey guys, I've been trying to do something which should've been simple, but apparently I'm missing something.
So I was using, "if (renderer.materail.mainTexture == myTextureVar)" to see if a texture is being used, to do something. Which worked fine. But it brought my draw calls from 13 to 24. I'm still in alpha with this project, so I'm afraid if I "allow" that to be, things will get out of hand by the time I say it's finished.
Anyways, so I figured out that changing the texture at runtime causes a new draw call, so I switched to the shader/material, and that kept my calls low.
But when I do "if (renderer.material == myMaterialVar)" then it doesn't work.
I even debug the material used, and here's where it gets weird. Instead of just debugging the "Material used is: myMaterialVar", it writes, "Material used is: myMaterialVar (Instance) (UnityEngine.Material)".
What do I have to script to check what material is being used if unity makes an instance of it and all other kinds of nonsense? And is there any documentation on this strange issue?
P.S. I write in javascipt
Answer by Eric5h5 · Sep 02, 2014 at 10:01 PM
Use sharedMaterial
instead. Accessing material
creates an instance. This is done for the sake of making things easier to use, where you can do stuff like, say, "renderer.material.color = Color.blue" to change the color of one specific object to blue, without having to create and manage material instances yourself. The downside is that you lose control over exactly what's going on. (Also, you're more likely to have misunderstandings about how Unity and materials actually work.)
So to maintain complete control you should never touch material
, and only use sharedMaterial
. It can be more work, but you can still do everything that you could with material
.
Thanks so much. I will research where it is best to use sharedmaterial ins$$anonymous$$d of material.
Your answer
Follow this Question
Related Questions
Building a Unity 5 Standard Material at runtime 3 Answers
Material doesn't have a color property '_Color' 4 Answers
Multi materials for one mesh 0 Answers
material Instance only updates after changes, when the Material Component is expanded or folded 0 Answers
How to change value from shader 0 Answers