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  之类的进行缓存
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值