基本原则 |
减少GameObject数量 |
减少GameObject上挂的组件数量 |
减少元素变动带来的消耗 |
减少依赖资源的数量及大小 |
减少常驻元素的每帧开销 |
预计算以少量储空间换高消耗的时间 |
延后处理,以很小的计算量换大量存储空间 |
UGUI制作最佳实践(具体项目具体分析)
- 实现无需渲染的事件接收组件。用其代替空的Image
- 减少UGUI无用的且需要渲染(Image/Text/RawImage等)的组件,(如空的Image)
- 需要渲染的组件,尽量不重叠
- 需要渲染的组件,重叠的尽量合并
- 减少不必要的GameObject节点。能放在同一级,就不要构建空的父节点
- 减少不必要的Component组件。能使用一个组件实现的就不要使用两个,不用最好。
- Horizontal Layout Group / Layout Element等组件,界面调好后,应该删除。自动国际化有冲突?
- Tween自定义实现,以减少脚本数量,及性能可管控
- 按键事件及摇杆事件应该统一监听,再下发给相应组件,以减少脚本数量。
- 样式相同的Text要使用代码改变内容,而不是创建两个,Disable其中一个。
- 样式相同的Image要使用代码改变内容,而不是创建两个,Disable其中一个。
- 能不用Mask就不用,能用Mask2D就不要使用Mask
- 能使用Image就不要使用RawImage
- 不要使用UGUI Outline及Shadow组件,使用自定义的
- 不需要接收触摸事件的UI元素,不要勾Raycast Target选项
- 界面保存时不要保留脏数据,如:预览文本及图片
- 界面打开只能使用本界面Atlas及Common Atlas
- 需要一个方便的缓存机制,有缓存需要时,使用其解决重复加载及实例化的问题
- 通用资源模板化。Button等
- 特效尽可能分步加载,不要直接拖到界面里面。
- 循环可复用列表
- Canvas,动静分离。频繁变化的与偶尔变化的分离。
- Image/Text的Color变化不需要Graph.Rebuild。可自定义修改Canvas Renderer的Color或者Alpha值
- 字体裁剪,及字体大小为固定的几档
- 裁剪UGUI的部分不需要的功能。如Button的颜色变化的disabled color一般用不到
- 可变图标,不同版本使用不同图片显示。如:PC下Esc,主机版本显示OB等
- 美术:图片尽可能的做小一点,不要多浪费一个像素。图片支持9宫格拉升操作及旋反转等拼接操作。
- 镂空九宫格实现,回形图片顶点UV方式渲染。需要自定义Image
- 翻转图片实现,左中右、上中下、顶点UV方式渲染。需要自定义Image
- 清空无效引用关系。如:Manifest的空值
- 能在制做的时候关联的,就不要在运行时去关联。如:GetComponent系列函数