UI特效方案
问题
UI 上的特效都会由 UIEffect.lua 生成。UIEffect 可控制特效的默认大小,隐藏操作,渲染层级。
当特效处于列表中, Mask 或 Rect Mask 2D 下会出现无法正确作用于特效。如
可见生成的特效 e_ui_icon_01.prefab 没有和 UI 一起被列表的遮罩 mask 掉。
问题原因
e_ui_icon_01 下的材质没有开启 Stencil。
处理方式
-
Project 下选中使用的特效
-
调用 Menu 下的 "Tools/UI/Convert UI SFX For Mask",生成 Stencil 版本的特效。如:e_ui_icon_01.prefab 会生成 e_ui_icon_01_stencil.prefab
- 在界面中使用新的 Stencil 版本的特效 prefab。
效果
Q:为什么不让所有特效都默认带上 Stencil ?
A:因为 Stencil 会有额外的性能消耗,UI 上的 Mask 也是一样的,应该少用。
Q:为什么不让美术生成 Stencil 版本的特效?
A:美术并不清楚哪些特效会用在列表里面,所以客户端在需要的时候生成 Stencil 版本特效使用会更合理。
注意:提交的时候,不仅仅是提交 xxx_stencil.prefab。工具把特效里的所有材质都生成 stencil 版本,务必注意。
Reference
https://zhuanlan.zhihu.com/p/388735435
https://zhuanlan.zhihu.com/p/563190795