Unity性能优化之UGUI优化篇

在Unity性能优化UGUI篇里,优化UGUI主要对内存、DrawCall等进行优化。以下为常见的优化方法。

1. UI的动静分离

        在大部分游戏里静态的UI要比动态的UI要多的,因此我们可以进行UI的动静分离,设置动态canvas和静态canvas,这样能够很大减少DrawCall的数量。

2.打图集

        将多个小的UI图片合并到一个大的图集中,减少材质的数量,从而降低 DrawCall。

        尽量一个界面的UI所用到的资源放在同一个图集中,一些公用的图片放到一张公用的图集中,当我们打开一个界面时只需要把对应的图集加载到内存中就可以了,也优化了内存。

3.UI资源的预加载

        UI实例化到场景中的过程:网格合并,组件初始化,渲染初始化,图片加载,界面逻辑调用等,消耗大量CPU。

        预加载:把资源加载到内存、UI实例化和UI初始化的CPU消耗放在loading等待时间线上 (尤其是在AB包的使用上,可提前加载资源,比如在登录过程中、场景切换的时间等都可以提前加载资源)

4. 剔除无用的资源

        在项目里没有用到的图片一定要删除,减少内存的使用。

        Resources文件夹下的无用图片以及资源,一定要删除掉,因为Resources下的文件不管是否有引用都会被打进包体。

5.使用对象池管理资源

        当项目过大时,需要频繁的使用创建和销毁UI对象,这样很消耗内存资源等情况,可以使用对象池进行资源的管理,需要时去池子里去取,不需要时还给池子。(对象池的具体使用就不在这里介绍了)

6.Text的优化

        (1)使用动态字体时要谨慎,因为它们可能会导致较高的性能开销。如果可能,尽量使用静态字体。新版Unity提供了TMP字体组件,同样会生成纹理和图集,相比Text优势是,TMP是矢量字算法,mesh顶点数少,字体同源,各语言能同屏显示。

        (2)避免使用BestFit功能

        BestFit功能会不断计算和调整字体大小可能会带来一定的性能开销,特别是在文本频繁更新的情况下。

7.避免使用OutLine和Shadow组件

        这些组件会使文本的Mesh顶点增加,导致开销过大。

8. RayCastTarget的功能优化

        当我们创建一个UI组件时,RayCastTarget是默认勾着的,不需要交互的UI组件,可以将RayCastTarget关闭。

9.避免图文交叉(Image1、Text、Image2)

        避免将Image和Text的顺序进行交叉,因为相同材质的Image之间是可以合批的,当有Text交叉之后,就会打断Image之间的合批,从而增加了DrawCall。

10.Mask与RectMask2D

        多个Mask之间可以进行合批,需要同渲染层级(depth), 同材质, 同图集。

RectMask2D本身不产生DrawCall,并且不同RectMask2D的子对象之间不能合批。

所以可以根据项目的具体情况进行选择。

11. ScrollView的优化

        当ScrollView中的内容过多或复杂时,可能会导致性能下降,特别是在频繁滚动的情况下。

利用对象池的原理来进行优化,比如要显示20个数据,屏幕中一次性只能看到5个元素,可以利用的GameObject只有6个,5个用于显示,1个用于缓存。

12. 高低端机型画质优化

        在开发项目时可以使用多套UI贴图,比如高清、超清两套贴图,根据不同的机型或者手机性能,来使用不同的贴图。

13.等等更多UI优化……

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值