UI 和粒子层级关系问题,粒子在UI中显示超出的部分不显示

时间:2024-04-09 10:30:43

需求
1、粒子需要在两个UI中间显示
2、粒子在UI中显示超出的部分不显示

先了解下渲染顺序
级别最高的排序
1、 Camera
Camera是unity中最优先的渲染顺序控制。depth越大,渲染顺序越靠后。
2、Sorting Layer
在Tags & Layers设置中可见
UI 和粒子层级关系问题,粒子在UI中显示超出的部分不显示
3、Order In Layer
相对于Sorting Layer的子排序,用这个值做比较时只有都在同一层时才有效。
4、RenderQueue
Shader中对Tags设置的“Queue”。

当Sorting Layer和Order In Layer相同时
RenderQueue小的先进渲染管线。

当Sorting Layer和Order In Layer不相同时!
当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[02500]或[25015000]时,SortingLayer和OrderInLayer的排序生效。

当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[02500]和[25015000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer的排序

材质的RenderType
UI 和粒子层级关系问题,粒子在UI中显示超出的部分不显示

总结:
如果单纯的粒子在UI上边则直接修改sortingOrder 即可
如果粒子在UI之间,
方法1、创建一个cavas,把要遮盖粒子的UI放到里边,并且设置sortOrder为10,这样普通的UI为0 上层的UI为10 ,在0-10 之间设置粒子的sorting就行
方法2、设置材质的renderQueue ,设置UI上下层材质的renderQueue,在中间设置粒子的renderQueue

lua代码:
local material = rend.material
material.renderQueue = queue
rend.material = material

需求2 粒子在UI中显示超出的部分不显示
使用 Sprite Mask控件,指定裁切的粒子的图片,粒子挂在概节点下,并且Render 的 Masking 属性设置为 Visible inside Mask

UI 和粒子层级关系问题,粒子在UI中显示超出的部分不显示UI 和粒子层级关系问题,粒子在UI中显示超出的部分不显示
渲染顺序参考自:https://blog.csdn.net/Tonight_Alive/article/details/87915921