0
点赞
收藏
分享

微信扫一扫

Unity—UI

流计算Alink 2024-03-09 阅读 25

UI动静分离

定义:将会动的UI元素静止不动的UI元素分离开来,让合并的范围缩小,只合并那些会动的UI元素,因为它们的重绘频率比较高

动静分离后,CPU在重绘和合并时的消耗就大大降低了

那么如何分离它们呢?UGUI系统的是Canvas,NGUI系统的是UIPanel

拆分过重的UI

如何拆分?把隐藏的UI拆分出来,使其成为独立运作的界面,只在需要显示时才调用实例化

UI预加载

在游戏开始前或在进入某个场景前预先加载一些UI,让实例化和初始化的消耗在游戏前平均分摊到等待的时间线上

大都使用AssetBundle来加载资源,也有部分使用Unity的本地打包机制(即使用Resources这个API接口)来加载资源

所有的预加载都会引出另一个问题,即CPU集中消耗会带来卡顿现象预加载并没有消减CPU消耗,只是把这些消耗分离了或者提前了,拆分到了各个时间碎片里,让人感受不到一瞬间有很大的CPU消耗

UI字体拆分

如何拆分?把字体中的常用字拆分出来,另外生成一个字体文件,让字体文件变小,消耗内存变少

Scroll View(滚屏)优化

为什么要优化?大量元素在窗口中不停地滚动会导致合批和渲染裁剪,在生成和滑动UI元素时,会消耗大量的CPU来重构网格,进而导致画面缓慢、卡顿

将策略中所有元素都实例化问题改为只实例化需要显示的实例数量,重复利用

网格重构的优化

UGUI系统的图元素在改变颜色或Alpha后会导致网格重

UGUI网格合并机制?将拥有相同材质球的网格合并在一起,才能达到最佳效果;一个材质球对应一个图集,只有相同图集内的图片才需要合并在一起

如何优化?使用自定义特殊材质球进行渲染改变颜色和Alpha,这样UGUI就不需要网格重构了

UI展示与关闭的优化

利用时间碎片进行预加载

在关键时隐藏节点而不是销毁(~……~虽然内存没有变化,但网格重构和组件激活会有大量的CPU消耗)

移除节点代替隐藏会更好(~……~移除屏幕后相机会对其进行裁剪判断,因此需要设置UI为不可见的层级Layout)

对象池的运用

程序中有重复实例化并不断销毁的对象

每个需要使用对象池的对象都需要继承对象池的基类对象,这样在初始化时可以针对不同的对象重载,区别对待不同类型的对象

销毁操作时使用对象池接口进行回收

场景结束时要及时销毁整个对象池

UI图集拼接的优化

充分利用图集空间

图集大小控制

图片的拼接归类

举报

相关推荐

0 条评论