UGUI drawcall优化(长期更新)

Posted 那个妹子留步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI drawcall优化(长期更新)相关的知识,希望对你有一定的参考价值。

优化点  UGUI DrawCalls
1.UI中Z坐标不为零的不能合批(使用工具 设置目标所有子节点为0) !!我们项目能减少20左右drawcall
UIRotation的X或Y修改,导致元素不在UI平面,则无法合批,原因和Position的Z值改变一样。
实例  两个图集   Image  ABBA  修改B的Z值  就会增加drawcall
2.同一个模块  尽量使用同一个图集  图片需要同一图集的才可以Batching
3.1重叠 不同图集之间的图片  避免无效重叠  会导致 drawcall 增加
3.2重叠 当GPU在绘画的时候,在一块区域有多个一样或者不一样的控件。 如text和图片,图片和图片,凡是物理上的叠加,那么我们就称呼这个为叠加,我们可以通过Scene窗口调为overdraw就能看到UI的叠加情况,叠加越多的地方越红(overdraw越高,越耗电)。
3.3重叠  文本通常是引擎自动生成的另外一张或若干张图集,如果没注意绘制顺序,很容易造成断批
4.使用RectMask2D  替代Mask   后者会断批
5.针对Text,保证相邻的Text使用相同字体,相同材质,这个一般情况都可以做到。
6.保证可以合批的元素在同一个Canvas下。
7.合批要求 针对Image,需要保证使用的图片在同一图集且同一个Group中,且使用的材质相同。

UI拼接建议
1.图片资源导入时,应把该UI所需图片放置到同一文件夹,以打成一个图集,复用的图片应视情况统一打成一个图集,但要注意一个图集不易过大,注意你的图片不能放在Resources文件夹下面,Resources文件夹下的资源将不会被打入图集;   (资源未根据  模块规整)
2.拼接时,尽量图文分开,文本在Hierachy视图里尽量都放在最下方(因为文本一般都是显示在其他UI上方的),不同字体的文本分开放不要交叉,自上而下同一图集的或使用同一资源的放在一起,注意不同资源的控件之间不要重叠,这个不必强求,根据实际情况分析调整即可;
3.很多时候复制过来的控件坐标会有变化,如无特殊需求,切记Z值设为零。(我们项目中目前有很多界面为了处理遮挡关系,调整了Z值),不为零的所有都不能合批的;
4.使用canvas,mask的部分不要重叠在原本可以合并的控件之间,否则会打断合批。

图集整理
1.设计UI时要考虑重用性,如一些边框、按钮等,这些作为共享资源,放在1~3张大图集中,称为重用图集;
2.其它非重用UI按照功能模块进行划分,每个模块使用1~2张图集,为功能图集;
3.对于一些UI,如果同时用到功能图集与重用图集,但是其功能图集剩下的“空位”较多,则可以考虑将用到的重用图集中的元素单独拎出来,合入功能图集中,从而做到让UI只依赖于功能图集。也就是通过一定的冗余,来达到性能的提升。


以下为参考来源
来源:https://blog.csdn.net/yunjianxi0000/article/details/96848283
来源:https://zhuanlan.zhihu.com/p/103612944
工具:https://www.jianshu.com/p/1482e8b4bce2
 

以上是关于UGUI drawcall优化(长期更新)的主要内容,如果未能解决你的问题,请参考以下文章

UGUI性能优化

drawcall优化

:unity性能优化之drawcall优化-1

Unity性能优化-DrawCall

cocos creator 性能优化之减少drawcall数量

UGUI合批drawcall高的原因