【Unity】静态优化工具支持UGUI合批分析、AB包冗余分析、预制体使用资源情况分析
目录
工具Github链接地址
工具功能
一、分析预制体静态资源,如贴图、精灵图、图集等使用情况。
二、分析AB包冗余情况
三、分析UGUI合批情况
工具Github链接地址
https://github.com/AMikeW/UnityResourceStaticAnalyzeTool
工具功能
一、分析预制体静态资源,如贴图、精灵图、图集等使用情况。
第一张图表格是预制体的使用资源情况,第二张图是分析预制体的依赖资源具体内容,主要是图片MD5作为key值存于字典中,字典的值为{图集Tag,SpriteAtlas路径,图片路径,预制体路径},标记为红的代表冗余,标记为黄的代表图集冗余,这个表格有过滤处理,如需查看未过滤的情况可修改源码如下位置;
直接搜过滤两个字,删掉这部分即可,tempDict为过滤后的字典,过滤的是 字典,由于较多地方用到,看实际情况修改,上面为其中一个例子。
二、分析AB包冗余情况
原理:加载工程内所有ab包,分析其下的全部资源(支持大多数资源类型),最终会分析出如下表格。
三、分析UGUI合批情况
0/0/0/0 代表 合批ID/深度/材质ID/贴图ID ,其中材质ID和贴图ID都是虚拟ID(被我修改后的,详情看源码)
大致参考https://gameinstitute.qq.com/community/detail/112235
这篇文章并没有给出工具,所以就自己实现了一下,可能有错误还需要优化调整,代码写的很乱,但是都有比较详细的注释。
原理:
按深度优先级顺序遍历Cavnas下的所有UI(可理解为Canvas为根节点),根据如下规则计算深度:
①UI下不存在任何UI时(注意UI下并不是指子UI),深度为0。
②UI下存在UI时,若可以与其下UI合批(材质、贴图相同)且相交,则深度为其下UI深度;若不可以与其下UI合批且相交,则深度为其下UI深度+1;当其下存在多个UI时,逐个计算出depth_1, depth_2, ... 取最大作为自身深度。
以上图为例说明,注意第二个数字就是深度;
1、M其下没有UI,深度为0;
2、A1其下有M,判断出不可与M合批且相交,深度为M深度+1=0+1=1;
3、A2其下有A1、M,判断出可与A1可批且相交,A2&A1_depth为A1深度=1,判断出不可与M合批且相交,A2&M_depth为M深度+1=0+1=1,取max(A2&A1_depth, A2&M_depth)=max(1,1)=1,为A2深度。
4、Text其下有A2、A1、M,同上原理计算出Text&A2_depth=2, Text&A2=2, Text&M=1,取最大为2;(其他情况同理)
每一个UI的深度计算出来后,还需知道它们的材质ID和贴图ID 以及 UI层级,进行如下的排序
1、深度先序
2、材质先序
3、贴图先序
4、层级先序(PS:UI层级即我们熟悉的渲染顺序层级)
最后,从前到后遍历整个列表,只要出现一个相邻元素贴图、材质、深度不同,合批ID会自增,说明它们不是一个批次的。
Mask打断合批的情况:(可选看)
1、 一个Mask自身下的 子UI可以合批, 但不能与Mask外的UI合批。
2、Mask下的所有子UI可合批时,有一个DC,而Mask自身也会生成一个DC(必然会有一个DC)
2、 多个Mask自身不会合批。
测试Unity 2017 4.32f1
(最优先考虑)
1、Mask整体(包括子物体UI) 不与任何UI相交时,
1.1 Mask自身可与其他Mask自身合批,合批ID必须一样(已确认)
1.2 Mask下的子UI可与其他Mask下的子UI合批,按照正常合批来考虑,合批ID必须一样(已确认)
1.3 Mask裁剪图可与其他Mask裁剪图合批,限制条件如下:
条件①:Mask图下不能有Text字体网格与子UI图相交(关于字体网格如何计算还未清楚,目前可粗略考虑为RectTransform相交)
条件②:Mask图不能和Text字体网格与子UI相交(已确认与4同理)
条件③:Mask图下不能有【不可合批的子UI图片】相交(已确认)
条件④:Mask图不能和【不可合批的图片】相交。(已确认,即Mask裁剪图的Mask物体们必须合批ID相同)
限制条件总结为:Mask图及其子UI不能存在不可合批的相交UI情况(UI包括Text、Image等)
但,只要满足限制条件,Mask裁剪图下的子UI无论是否能合批,裁剪图都会合批;比如:即使子UI下存在不可合批的UI,但只要它们没有相交,那裁剪图就能合批!
2、Mask整体 有与其他UI相交时, (与1相反)
2.1 Mask自身不能与其他Mask自身合批
2.2 Mask下的子UI不能与其他Mask下的子UI合批
2.3 Mask裁剪图不可与其他Mask裁剪图合批(暂未发现其他能合批的情况)
3、默认情况(无论是否相交)
Mask下的子UI可合批,只要保证材质、贴图相同
总结为
1、Mask自身合批,必须自身合批ID一样(与正常一样 不用管)
2、Mask下子物体合批,也必须是子物体的合批ID一样(与正常一样 不用管)
3、Mask裁剪图合批,必须满足Mask自身可合批,Mask下子物体之间不能合批的不能相交(如图片和字体,不同图集的图片)
关键3,检查Mask之间自身的合批ID,若不一样标注:Mask裁剪图不可合批,因Mask图不能合批
检查Mask下的子UI,检查所有子UI,存在不相同合批ID的UI相交时,标注:Mask裁剪图不可合批,因存在不可合批的子UI相交
【Unity】静态优化工具支持UGUI合批分析、AB包冗余分析、预制体使用资源情况分析相关推荐
- 【Unity】优化工具Profiler
Profiler 基本设置和布局 基本设置 基本布局 性能分析器(Profiler)是Unity内部集成的一款性能优化工具,可以检查脚本代码,查看运行过程中资源使用情况,还可以比较不同平台上的性能.但 ...
- 实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析
20200326下午,有消息说[1]github的TLS证书出现了错误告警.证书的结构很奇怪,在其签发者信息中有一个奇怪的email地址:346608453@qq.com.明显是一个伪造的证书. 为了 ...
- 【Unity编辑器扩展实践】、查找所有引用该图片的预制体
上一篇Unity编辑器扩展实践二.通过代码查找所有预制中已经查到到所有的预制体了. 然后我们就可以用这些预制体做一些其他的操作了,比如查找该预制的资源引用.可以直接遍历预制,找到预制里面的所有Imag ...
- 算法优化:最大子段和,最大子矩阵和,一维,二维情况分析,动态规划
最大子段和,前面b[j]理解的是:终点在j的最大连续子段和,及从k:j最大和 是对b[j]进行动态规划,从k:j最大和:取决于k:j-1的最大和,他大于0的话,就为k:j-1的最大和+arr[j],他 ...
- unity|加载AB包|有依赖关系的AB包
进阶,异步加载AB包,请看<异步加载有依赖的AB包> 目录 为什么AB包会有依赖关系呢? 步骤 代码 为什么AB包会有依赖关系呢? 例如导入一个预制体的时候,预制体可能有图片,如果只把这个 ...
- Unity性能优化分析思路
1)Unity性能优化分析思路 2)Unity2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常 3)FBX默认会冗余lit.mat ...
- 威雅[ViYa]QQ优化工具0.64
威雅[ViYa]QQ优化工具0.64支持简繁英所有版本[01-14更新] 免责声明: 首先使用此工具前,请您确保已经认真详细阅读过腾讯公司和QQ软件以及其他类似软件相关许可协议.使用此工具是您的自愿选 ...
- 【小程序源码】llz制作生成装逼工具支持小程序和公众号制作生成
这是一款制作生成小工具 支持小程序主图制作生成 也支持公众号的llz制作生成 每一种制作都包含了所有的模式 用户自己填写选择制作就可以了! 好了下面来看看小编的测试演示图吧! 小程序源码下载地址:[小 ...
- Unity的AB包系统使用概论
0. 名词表 资源:Resource,主要分为Prefab,Image,AudioClip等,一般在开发时为单个文件 包/ab包:AssetBundle,打包后的单个文件,内含若干资源 包名:Asse ...
最新文章
- iOS原生与html交互 使用第三方WebViewJavascriptBridge
- 零基础学python需要多久-Python要学习多久能入门?精通需要多久?
- Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法
- SppNet 多尺度训练
- 【计算机组成原理】定点运算器的基本结构
- 面试中如何剔除“鱼目混珠”程序员?
- Indent Guides for Visual Studio 代码格式化收缩插件
- keychron k8 连接切换蓝牙方案
- 内存缓存 原理 实现
- 中英文对照 —— 音乐
- Flutter BuildOwner之dirty elements简析
- 无线AP与无线路由器都有些什么区别?(一)
- 【python】 turtle实现汉诺塔游戏动画过程
- 如何快速在Mac 安装 jq 命令行 JSON 解析器
- java好听的名字_(男孩起名)李白诗中最唯美的三字名字推荐,李白诗中最唯美的三字名字取名方法 - Java伴我余生 - 宝宝起名网...
- linux IO_FILE 利用
- foreach求和的效率和连接mysql的sum求和的效率
- Spring boot、Spring cloud深度技术集锦
- SSMS SQL格式化插件-SQL Pretty Printer
- (附源码)ssm保险办理系统 毕业设计 012232