UGUI drawcall优化(长期更新)
Posted 那个妹子留步
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI drawcall优化(长期更新)相关的知识,希望对你有一定的参考价值。
lua内存泄露分析
可参考学习
https://www.cnblogs.com/yaukey/p/unity_lua_memory_leak_trace.html
https://www.136.la/jingpin/show-35259.html
优化点 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
RenderTexture 的原理
https://www.cnblogs.com/crazytomato/p/7809892.html
Unity 摄像机投射rendertexture到RawImage
游戏中特效或者3D物体要显示到UGUI上时,一般会用投影的方式
特效投影到UGUI上
内存激增的处理优化
https://www.cnblogs.com/yanghui0702/p/yanghui20181026.html
--大资源的加载改为小资源逐帧 加载
--监控内存是否激增 (比如标准32兆 )
--记录物体创建的 列表
1.消耗GC的方法
GetComponentsInChildren
if(other.tag == a.tag)改为other.CompareTag(a.tag).因为other.tag为产生180B的GC Allow.
1)每次GetComponent均会分配一定的GC Allow.
2)每次Object.name都会分配39B的堆内存.
最好包装 需要经常获取对象的 tag name 之类的进行缓存
以上是关于UGUI drawcall优化(长期更新)的主要内容,如果未能解决你的问题,请参考以下文章