跳转至

UI特效方案

问题

UI 上的特效都会由 UIEffect.lua 生成。UIEffect 可控制特效的默认大小,隐藏操作,渲染层级。

当特效处于列表中, Mask 或 Rect Mask 2D 下会出现无法正确作用于特效。如

image-20221012174233497

image-20221012174411316

可见生成的特效 e_ui_icon_01.prefab 没有和 UI 一起被列表的遮罩 mask 掉。

问题原因

e_ui_icon_01 下的材质没有开启 Stencil。

处理方式

  1. Project 下选中使用的特效

  2. 调用 Menu 下的 "Tools/UI/Convert UI SFX For Mask",生成 Stencil 版本的特效。如:e_ui_icon_01.prefab 会生成 e_ui_icon_01_stencil.prefab

image-20221012182813407

  1. 在界面中使用新的 Stencil 版本的特效 prefab。

效果

image-20221012183411078

Q:为什么不让所有特效都默认带上 Stencil ?

A:因为 Stencil 会有额外的性能消耗,UI 上的 Mask 也是一样的,应该少用。

Q:为什么不让美术生成 Stencil 版本的特效?

A:美术并不清楚哪些特效会用在列表里面,所以客户端在需要的时候生成 Stencil 版本特效使用会更合理。

注意:提交的时候,不仅仅是提交 xxx_stencil.prefab。工具把特效里的所有材质都生成 stencil 版本,务必注意。

image-20221012181132312


Reference

https://zhuanlan.zhihu.com/p/388735435

https://zhuanlan.zhihu.com/p/563190795