找回密码
 立即注册
查看: 414|回复: 0

Unity UGUI合批

[复制链接]
发表于 2022-6-27 20:22 | 显示全部楼层 |阅读模式
1.同一层级相邻的两个image会根据 材质和图片信息是否相同来判断是否可以合批,如果相同,不会改变image的深度信息,将被放到一个批次里面。
2.同一层级里面的相邻两个image如果材质或者图片不同将不会合到一个批次里面,相对处于下面位置一点的图片的深度信息会增加1。
3.如果不能合批的两张图片的mesh的有重叠,将会打断合批操作,增加一个drawcall。
4.使用Image的Tiled模式会回增加mesh的数量,相当于直接拷贝多个相同的图片进行平铺,会增加顶点数,可以使用RawImage代替,图片格式需要设置成default,且选择repeat模式。




5.使用Mask组件会增加DrawCall,因为Mask的内部处理机制使用不同的材质对显示区域进控制,并且处于mask下面的子部件的显示区域和mesh大小不会有任何的改变,子物体在遮罩外面也同样会产生DrawCall。Mask组件需要挂载在包含Image的组件下面,可能会产生无用的DrawCall。可以使用RectMask2D代替。RectMask2D会将不在遮罩范围内的图片剔除掉,不进行渲染。 RectMask2D的子物体不会和外面层级的图片进行合批,但Mask的子物体可以和外面层级的物体合批。根据情况具体选择使用哪个。




6.Canvas 下的图片,文字等元素发生改变时会将整个canvas进行重绘,增加性能消耗,所有在使用时可以根据情况进行资源的动静分离成动态canvas或者静态canvas进行挂载。建议同时存在不要超过4个。canvas不会打断原来的合批而是每个canvas下的物体会进行新的合批计算。可以在动态部件上直接挂载canvas,如下图



UGUI性能优化 减少DrawCall


  • 一个完整界面使用到的图片尽量打成一个图集,多个界面公用的图片打成一个图集,注意图集和图集之间不要有图片冗余


  • 图集设置信息 及分类






  • 动态打图集 假设多个图集 每个图集有100多张图片或更多  但每个图集只用到了其中一个或者几个图片 就浪费了很大资源 可以选择动态打图集,将某几张图片动态生成一个图集
动态打图集Git地址 https://github.com/DaVikingCode/UnityRuntimeSpriteSheetsGenerator
4.不需要产生交互的图片和文字尽量去掉RayCastTarget

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 20:56 , Processed in 0.091809 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表