Unity里默认的粒子特效是3D渲染方式的,而UGUI又是特殊的渲染方式。
如果想在UI里直接放入粒子特效,会导致:
- 分层问题,粒子特效的层级排序由Z轴以及sort layer决定,而UI的层级排序由节点顺序决定。这就会导致,粒子特效要么在UI之上,要么在UI之下,没法实现穿插在中间的效果
- 裁剪问题,如果要在滚动框里放一个粒子,很容易就穿帮。因为UI的UI MASK对3D粒子不生效。
- 自适应缩放,普通粒子并不会跟UI一样,随着分辨率的变化而自动缩放适应
解决方法:
参考:UGUI粒子特效裁剪,层级,适配_Black-Coder的博客-CSDN博客
项目:nizhenchao/UGUIEffectDemo: 基于UGUI的粒子特效解决方案。 (github.com)
1、cs代码。
建一个cs脚本【UIParticleSystem.cs】,继承自 MaskableGraphic,这样就可以把这个粒子系统系统发射出来的粒子当成UI元素了。具体代码可以到项目里查看。
为了能够让粒子系统发射出来的粒子能够在UI层级上显示(UGUI的渲染队列是 “Transparent” ,RenderQueue = 3000,是透明度混合队列),所以单独提供了一个 shader。并且在Shader里开启了模板测试,这样的粒子才能被裁剪
使用方法:
1.在特效上挂载 UIParticleSystem.cs 脚本,此时 ParticleSystem 会自动被挂载上。(会隐藏掉粒子的Render属性),如果一个粒子底下有多个粒子,只需要在最根节点挂 载就行了,会自动递归下去
2.创建材质球,使用 "17zuoye/UI Particle Addtive" shader,并给材质球附上对应贴图后拖到 UIParticleSystem.cs 的material的字段上。