- Home /
How to Set Custom UI Image Material Render Order?
Using Unity's 4.6+ UI system, I've created a custom UI shader that is exactly like the built-in UI-Default.shader, except it does a color substitution from a gradient texture before returning the color in the fragment shader.
The problem I'm encountering is that, when I create a material using my adjusted shader, and I assign that material to a UI Image component's "Material" slot, the render order rules of Unity's UI seem to no longer apply. Without the custom material, I can re-order UI elements in the hierarchy to move images in front of or behind one another, but with the custom material, it always renders behind everything else.
Actually, the only way I've been able to get the ordering to work correctly is to add a custom component to the GameObject that does this:
image.material.renderQueue = image.defaultMaterial.renderQueue;
This seems to work OK (though I need to test more), but it seems a bit like a hack. Is there a "right" way to make custom shaders/materials respect the UI ordering rules? Is the ordering aspect a property of the shader or material or something else? Should I be using the CanvasRenderer component to do some sort of ordering operation or something?
In general, it's really unclear how this is supposed to work, and the documentation hasn't been super helpful either. Any ideas to point me in the right direction?
Your answer
Follow this Question
Related Questions
UI Triangle Color picker 0 Answers
Select material of Canvas Renderer 0 Answers
UI Gaussian Blur in Universal Render Pipeline 0 Answers
Marmoset + Unity 4 vs Unity 5 Lighting 0 Answers
How to make standard shader act like diffuse shader? 2 Answers