前言
最近对项目的UI性能优化做了一些整理
一、概念环节
- 内存方面
- 控制基础美术资源的大小,一般全屏的图大小不要超过游戏的分辨率,最好为分辨率的一半。
- 不需要支持透明的图片使用Jpg格式(RGB),PNG图片Unity会默认转成RGBA16控制图集的大小是2的次幂(NPot),如512512,10241024等,因为Gpu只支持读取NPot类型的图片,非Npot的图片需要额外转换,如果向上取像素则会多占用内存。
- 提高图集的利用率,不要留太多空白。
- 可以使用九宫格拉伸来实现的大图最好使用九宫格。
- 提高资源的复用率,如几张只是颜色不同的图片可以使用一张灰色原图,使用时给顶点赋值颜色即可。
- UI资源不要使用Mipmap,因为用不上!
- 加载方面
- 同一个UI面板的所需图片资源,最好放入同一图集,因为资源加载的最小单位就是一张图集,这样可以保证一个面板的创建只要加载一张图集。
- 不同的ui模块最好放入不同的AB包中,进入模块时只需加载一个Ab包。
- 不要直接引用其他Ab包的资源,会被多个模块使用的资源打在一个公共包中,游戏开始只加载公共包可以缩短游戏加载的时间
- 渲染方面
- 不要堆叠太多的层级,会给深度测试带来压力
- 暂时不展示的UI组件要隐藏掉,而不是调整透明度,透明度为0的图片依然会加入渲染队列
- 对于在列表中展示的物体,要使用虚拟列表,当前不可见的子物体不去渲染
- 不要频繁的创建和删除物体,此类物体最好使用对象池
- 文本Text空间的倾斜,下划线等效果会大大增加文字的顶点数量(几倍),大量文字不要使用此效果
- 限制动画的节点数量,不要有太多的粒子效果
二、QA环节
1.怎么在Unity中查看图片所占内存的大小,怎么在Unity中修改图片资源的参数?
在Unity工程文件夹中选中要查看的图片,在检视面板右下角的预览中可以看到大小,上面是可修改的参数
2.怎么在Unity中查看UI渲染损耗?
Game界面点击Stats,主要关注Batches和Cpu损耗,数量越大性能损耗越大,想了解具体损耗原因,可在Scene界面选择ShadingMode中选择OverDraw模式,颜色越深地方说明重叠次数越多,渲染压力越大。再此有很多模式可选,如查看顶点数量之类就不一一赘述了。
总结
个人水平有限,有什么描述错误的地方欢迎指正,缺少的部分也欢迎各位大神在评论区补充。