AssetBundle冗余资源检测器

作者: 星海回音 | 来源:发表于2016-07-28 18:26 被阅读449次

    最近我们项目快上线了,把项目提交到了一个专业做Unity项目优化的网站。——uwa
    他们号称没有不存在资源冗余的项目,我们提交以后确实发现了一些冗余资源。但是他们网站有2个缺陷:

    • 免费用户一个月只能检测2次
      • 不自由
      • 付费用户6600/季度
    • 需要上传自己项目的所有AB文件
      • 不安全

    而且,我仔细想了下,这里面的技术其实不是很复杂。就衍生了一个自己写一个小插件的想法,然后ABRedundancyChecker就诞生了。

    一、插件介绍

    1. 我把AB包所有的资源分为两类
    • 本包资源
    • 依赖包资源
    1. 该插件把每个AB包的本包资源都列举出来,然后统计这些资源是否有重复,重复则为冗余。
    2. 插件github仓库地址:https://github.com/inkiu0/ABRedundancyChecker
    3. 喜欢的赏颗星星

    二、ABRedundancyChecker使用方法

    1. 修改脚本参数

    1. 把以下参数改成自己想要的:
    /// <summary>
    /// AB文件名匹配规则
    /// </summary>
    public string searchPattern = "*.ab";
    /// <summary>
    /// 冗余资源类型白名单
    /// </summary>
    public List<Type> assetTypeList = new List<Type> { typeof(Material), typeof(Texture2D), typeof(AnimationClip),   
    typeof(AudioClip), typeof(Sprite), typeof(Shader), typeof(Font), typeof(Mesh) };
    /// <summary>
    /// 输出路径
    /// </summary>
    public string outPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
    /// <summary>
    /// AB文件存放路径,会从这个文件夹下递归查找符合查找规则searchPattern的文件。
    /// </summary>
    public string abPath = "Assets/StreamingAssets";  
    [MenuItem("AB冗余检测/AB检测")]
    

    2. 开始使用

    1. ABRedundancyChecker.cs放在Unity项目的Editor目录下
    2. 将所有打包好的AssetBundle文件放在abPath目录下
    3. 点击菜单栏AB冗余检测->AB检测
    4. 喝一杯茶
    • 250MB的AB文件(1600个文件)检测时间为2分钟
    1. 打开输出到目标目录的MarkDown文件

    3. 输出的MarkDown形如

    资源名称 资源类型 数量 AB文件名
    smoke_01 Texture2D 14 art_11_1.ab art_13_103.ab art_13_104.ab art_13_107.ab art_13_109.ab art_13_131.ab art_13_132.ab art_13_31.ab art_13_63.ab art_13_77.ab art_13_81.ab art_13_87.ab art_2_128.ab art_4_1.ab
    wuti_07 Texture2D 12 art_11_1.ab art_12_4.ab art_13_102.ab art_13_116.ab art_13_142.ab art_13_17.ab art_13_22.ab art_13_31.ab art_13_59.ab art_13_61.ab art_13_73.ab art_4_1.ab

    相关文章

      网友评论

      • _树下懒人_:UnityEngine.Object obj = ab.LoadAsset(allDepen[i]);//obj 一直为空 这是为何呢
        if (obj != null && assetTypeList.Contains(obj.GetType()))
        TryAddAssetToMap(obj.name, allDepen[i], abName, GetObjectType(obj));
        简单的打了几个包,其实是存在冗余的,但是输出不存在任何信息?请教下楼主遇到过这种情况没,或者说我打包方式不对?
      • 698cb3cd5cbf:回头试试
      • SleepyHippo:谢谢分享~有点小问题是,unity5.4运行检查后,在关闭Unity时,会Crash,不过不影响使用。
      • 好怕怕:挺不错的

      本文标题:AssetBundle冗余资源检测器

      本文链接:https://www.haomeiwen.com/subject/ezbajttx.html