【UGUI】ui性能优化

UGUI的性能从三方面来优化

一、从CPU方面优化

1、重建界面:

  1. 尽量减少Rebuild的频率,将动态和静态的元素分离,放到不同的Canvas里面
  2. 使用尽可能少的UI元素。这里指的是删除不必要的节点和隐藏不用的节点。这样能减少深度排序和rebuild Layout的执行时间

2、触摸事件

对应不需要接受输入的元素。一定要关闭Raycast Target选项

3.UI的隐藏和显示

UI切换的时候,有两个地方非常耗时,一个是SetActive,另外一个则是SetParent。

SetParent暂时没有好的处理方法

SetActive可以在切换UI的时候。不把UI 设置SetActive(false),而是设置UI的Layer。

给需要隐藏的设置一个canvas,单独设置相机,对update等脚本做控制

4.减少DrawCall

https://www.cnblogs.com/murongxiaopifu/p/4284988.html dc更多是优化cpu的效率,减少cpu调用图形接口的开销

  • 合批

    图集

    相同材质,相同纹理对象相邻

    注意控制层级号

  • 避免或减少Mask的使用,1个Mask至少增加两个DC

二、从GUP方面优化

原因:

  • 造成GPU的性能瓶颈一般在复杂的shader和overdraw造成的像素填充过多
  • overdraw主要是因为大量的UI重叠引起的

降低overdraw可以做如下优化:

  • 禁用开不见的UI。在被别的UI全部挡住时。可以考虑将系统禁用
  • 尽量减少alpha = 0的资源的使用,因为这种资源也会参与绘制,占用一定的GPU。
  • 制作图集的时候,尽量使小图排布紧凑,尽量图集中大面积留白,理由同上。
  • 如果sprite是中心镂空且切图为九宫格时,可以去除fill center,以减少over draw
  • 不要使用空的Image。游戏中许多时候会使用一个透明的Image组件来监听点击事件或者屏蔽Image后面的按钮事件,空的Image可以解决这个问题,用起来也很方便,但是空的Image照旧会参与绘制,从而产生overdraw。解决办法是扩展Graphic组件来替换Image组件,RayCast使用Graphic作为基本元素来检测touch。
  • https://blog.csdn.net/zhenmu/article/details/88821562 实现新的outline

三、内存

控制纹理的图片压缩格式

图片尺寸大小为2次幂或者能被4整除

控制图集的大小,减小内存碎片

九宫格

复用的循环列表

关闭mipmap

关闭read&write

子体资源剔除(字体资源(Font)以及文本资源(Text Asset))

主要是以下几个方面会导致内存有问题:

  1. 纹理
  2. 网格
  3. 材质
  4. 动作
  5. 音频
  6. 游戏对象的数量

 

2、参考

https://blog.csdn.net/shengtianzhu/article/details/90180001

https://blog.csdn.net/gaojinjingg/article/details/103565840

https://www.cnblogs.com/murongxiaopifu/p/4284988.html

https://www.jianshu.com/p/48f1a1b7949e

你可能感兴趣的:(UGUI)