项目中UGUI优化(不定期更新)

官方UI优化教程 [youtube需要墙] Unite '17 Seoul - Tips and Tricks for Optimising Unity UI

关于UGUI Drawcall合并原理,参考这位大佬的博客 UGUI Drawcall 合并

UI Batching Rules

  1. Are on the same Canvas 在同一个画布下面
  2. Share the same Material 使用同一个材质
  3. Share the same Sprite Asset 在同一个图集
  4. Have Rectransform that are Co-Planar to each other(Same Z Pos) rectTransform在同一个屏幕(z的坐标相等)
  5. Are Clipped by the same Mask 被同一个mask裁减

UI 优化

  1. 使用Text的时候,尽量减少使用Outline 和Shadow组件,会增加三角顶点和多次渲染。建议使用TextMeshPro。下面是两个组件都使用了描边和阴影之后的对比。项目中UGUI优化(不定期更新)
    项目中UGUI优化(不定期更新)
  2. UI元素尽量不重叠,这里的不重叠我理解的是,不是RectTransform的矩形框不重叠,而是网格不重叠,这样会减少overDraw。
  3. 当UI元素alpha为0,sprite为空,或者在屏幕外,就把这个元素隐藏掉。
  4. 在UGUI中设置位置,颜色等,先判断先是否相等,如果相等,就重新复制,避免重绘。
  5. 不需要响应的,Raycast组件去掉勾选。
  6. 关于遮罩,当一个界面只有一个mask,使用RectMask2D 优于 Mask 。当有两个mask,那么,两者差不多。 当 大于两个mask,那么,Mask 优于 RectMask2D。
  7. 打包图集SpriteAtlas,公共的图集尽量打在一起,做好图集的分类。任何图集最大size 都控制在1024*1024之内。
  8. 动静分离,我的理解就是几乎不改变的ui放在一个画布下面,需要多次重新绘制的ui放在一个画布下面。这样重新绘制的时候,不需要全部都绘制一遍。
  9. 对于UI有频繁隐藏和显示的,一般不建议调用SetActive,可以禁用Canvas和Graphic Raycaster。
  10. 对于频繁 Instantiate,Destroy的ui元素,建议使用对象池,重复利用。
  11. 特别大的图片,尽量使用九宫格。但是背景那些无法使用九宫格,只有压缩。
  12. 不打包的单张图片,分辨率必须是偶数,尽量是2的N次幂。
    以上,都是我做项目的时候,用过到的优化,后续有新的会继续补充。