解决NGUI界面层级和Unity物体的层级渲染顺序问题的一种办法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值