UI优化
动静分离、拆分UI、预加载、字体拆分、滚屏优化、网格重构优化、展示关闭优化、对象池、贴图优化、图集拼接优化、UI业务逻辑中GC优化等。
一、动静分离
** 问题:**unity中UGUI系统都是使用网格模型来构建,UI元素只要“动”,就会发生网格的重构合并。正所谓牵一发而动全身,少的UI元素的动导致整个UI的重构,由此带来重绘导致了cpu的开销。
解决方案: UGUI系统亿Canvas作为自己的重绘节点,所以需要以canvas作为节点拆分动和静的UI元素。比如某个展示页面比较复杂,可以将那些静止不会发生变化的(动画、颜色、材质等)放到一个canvas下,把那些需要动的如常见的动画、特效等UI放到一个canvas下。有些常驻的动画,也可以单独做一个canvas作为这些效果的根结点。
二、拆分过重的UI
问题:随着项目的迭代,UI系统的复杂度不断上升。如果没有良好的划分和设计,会导致UI功能和结构越来越臃肿。UI实例化和初始化时,cpu消耗变大,后期维护迭代也变得越加困难。
解决方案:在UI设计的最初阶段就要把各个画布的主要职责划分出来,一些窗体和图标动效等也需要拆分出来作为预制体。对于一些复杂的界面加载和实例化,可以逐模块分散加载。
三、 UI预加载
问题:有些UI可能比较小、难以拆分,亦或者拆分后任然消耗很多cpu,它比较大常驻在界面。
解决方案:这些UI可以在游戏开始前加载UI资源但不实例化,只是将其加载到内存中。跟进一步将UI的实例化和初始化也提前到游戏开始前。实例化和初始化完成后,将其“隐藏”起来,待到需要的时候再将其展示出来。“隐藏”即可以将UI放在某一特定不被渲染或者未激活的层级,也可以将其放到摄像机视角之外藏起来(遮影步QAQ)。
Tips: Unity自带Preload功能,在编辑器平台设置里面。Unity会在进入应用的时候讲这些预制体进行预加载。
四、字体拆分
问题:字体一定程度上站了很大的空间(汉字