Jtro的技术分享:UGUI的极限优化

C#

浏览数:84

2019-8-30

AD:资源代下载服务

关于unity中的UGUI优化,总有说不完的话题,优化方式有很多种,我今天要说的这种,算是一种简单的优化,实在开发人员觉得实在没有优化的方式采取的优化方式。
首先第一种,当你在创建了一个UI组件的时候,UI组件会自动将“Raycast Target”打开,其实当这个UI不需要交互的时候,这个功能是可以关闭的,如果将这个关闭掉,也是一项不小的性能优化方式。


Raycast Target.png

第二种,text组件尽量不要勾选“Best Fit”这个选项,因为当你勾选了这个选项的时候,unity会在后台做大量的运算,将所有符合规定的字号一个一个的遍历出来,勾选了这个选项,不仅仅消耗资源还占内存。


Best Fit.png

第三种,就是UI的合批。什么是UI 的合批呢,就是当canvas下的组件如果连续2个(包括父子关系)是同类型的组件,那么unity在计算的时候就会当做这2个UI是同一个组件进行一次绘制,证明如下:
场景中添加一个按钮组件和一个图片组件,这时候的drallcall的数量是:5


添加了一个按钮和一张图片的场景.png

现在,我在Image的下面添加多个image,和在按钮的子级下面添加多个text组件,再看drallcall的数量


添加了多个image和text

这时候,由于进行了ui的合批,drallcall并没有变化。

那么,如果他们不是相邻的而是穿插的,结果会如何呢?


效果图

不会进行合批。不会进行合批的原因是什么呢?因为它们相互覆盖了,那么,如果将它们设置的不相互覆盖,会如何了呢?


没有进行覆盖的UI

那么unity还是会将它进行合批。

虽然合批降下drallcall很少,但是在许多的页面中,以及如果你的项目在手机这样的运行平台,那么这样的极限优化是很有必要的。

图片发自简书App

作者:Jtro