首先做个测试项目
【小松教你手游开发】【unity实用技能】NGUI Depth探索_第1张图片
每个子节点节点的东西基本是一样的
【小松教你手游开发】【unity实用技能】NGUI Depth探索_第2张图片
这里的TestDepth脚本只做一件事
【小松教你手游开发】【unity实用技能】NGUI Depth探索_第3张图片

获取RenderQueue。输出。

不过在每个父节点上有个UIPanel。
【小松教你手游开发】【unity实用技能】NGUI Depth探索_第4张图片

通过设置不同UIPanel和不同UISprite的Depth值来测试NGUI是怎么区分深度的。

通过脚本输出RanderQueue可以看到

【小松教你手游开发】【unity实用技能】NGUI Depth探索_第5张图片

看最后的数字。
以前我以为是按一定系数相乘再相加。
其实是根据UIPanel的个数排序。排最先的UIPanel的第一个UIWidget从3000开始。
根据同一个UIPanel下的UIWidget排序。Depth最先的RenderQueue最小。逐个网上加一
这个UIpanel的算完以后算下一个的,也是继续加一。
这就是NGUI的Depth控制深度的原理,控制RenderQueue,通过UICamera,UIPanel,UIWidget的顺序一个个往上加一,不产生间断。

所以如果想在某一个UIWidget上挂粒子,找到这个UIWidget的RenderQueue,往上加一就可以了~

如果刚好夹在两个UIWidget中间,尝试插个空白的不同Drawcall的UIWidget来隔开。