NGUI的渲染层级顺序是由UIPanel来确定的,看源码我们得知UIPanel下的所有UIWidget的RenderQueue是递增的。
而Unity的物体,如果是Transparent渲染的话,会和NGUI一样,这就有可能处于同一层级导致随机前后的情况。
我们来看看正常的NGUI渲染顺序是这样的
都是递增1,这样就保证了UI的显示正确。那么我们可以把Unity的物体,比如常见的界面特效的RenderQueue来调整到这些指定的Widget上,来控制他们的渲染顺序。
核心代码就是获取特效的所有Renderer中Material。再将Widget的UIDrawCall中的renderQueue增加或减少来赋值给特效Material的RenderQueue就可以实现特效在UI控件前或后的目的了。
当然有朋友会发现,因为NGUI的层级是递增1的,可能会出现特效层和某个UI同层的情况。
所以我们还需要更改NGUI的源码,增加他的渲染递增间隔。
位置就在UIPanel的大概1577行(不同版本可能不太一样,我没有统计)
代码中:
dc.renderQueue = (renderQueue == RenderQueue.Explicit) ? startingRenderQueue : startingRenderQueue + (i);
更改为:
dc.renderQueue = (renderQueue == RenderQueue.Expli