项目中UGUI优化(不定期更新)
官方UI优化教程 [youtube需要墙] Unite '17 Seoul - Tips and Tricks for Optimising Unity UI
关于UGUI Drawcall合并原理,参考这位大佬的博客 UGUI Drawcall 合并
UI Batching Rules
- Are on the same Canvas 在同一个画布下面
- Share the same Material 使用同一个材质
- Share the same Sprite Asset 在同一个图集
- Have Rectransform that are Co-Planar to each other(Same Z Pos) rectTransform在同一个屏幕(z的坐标相等)
- Are Clipped by the same Mask 被同一个mask裁减
UI 优化
- 使用Text的时候,尽量减少使用Outline 和Shadow组件,会增加三角顶点和多次渲染。建议使用TextMeshPro。下面是两个组件都使用了描边和阴影之后的对比。
- UI元素尽量不重叠,这里的不重叠我理解的是,不是RectTransform的矩形框不重叠,而是网格不重叠,这样会减少overDraw。
- 当UI元素alpha为0,sprite为空,或者在屏幕外,就把这个元素隐藏掉。
- 在UGUI中设置位置,颜色等,先判断先是否相等,如果相等,就重新复制,避免重绘。
- 不需要响应的,Raycast组件去掉勾选。
- 关于遮罩,当一个界面只有一个mask,使用RectMask2D 优于 Mask 。当有两个mask,那么,两者差不多。 当 大于两个mask,那么,Mask 优于 RectMask2D。
- 打包图集SpriteAtlas,公共的图集尽量打在一起,做好图集的分类。任何图集最大size 都控制在1024*1024之内。
- 动静分离,我的理解就是几乎不改变的ui放在一个画布下面,需要多次重新绘制的ui放在一个画布下面。这样重新绘制的时候,不需要全部都绘制一遍。
- 对于UI有频繁隐藏和显示的,一般不建议调用SetActive,可以禁用Canvas和Graphic Raycaster。
- 对于频繁 Instantiate,Destroy的ui元素,建议使用对象池,重复利用。
- 特别大的图片,尽量使用九宫格。但是背景那些无法使用九宫格,只有压缩。
- 不打包的单张图片,分辨率必须是偶数,尽量是2的N次幂。
以上,都是我做项目的时候,用过到的优化,后续有新的会继续补充。