unity3d:Assetbundle资源冗余检查输出markdown

转https://zhuanlan.zhihu.com/p/21960395
原理:

  1. 获取ab里面所有依赖
  2. 每个依赖的全路径作为字典key,被一个ab应用+1
 public void CheckABInfo(AssetBundle ab, string abName)
    {
        EditorSettings.serializationMode = SerializationMode.ForceText;
        string[] names = ab.GetAllAssetNames();//这里如果是预制体-》ab的包,里面包含只有预制体一个
        string[] dependencies = AssetDatabase.GetDependencies(names);//预制体包含的所有资源
        string[] allDepen = dependencies.Length > 0 ? dependencies : names;
        //Dictionary<string, UnityEngine.Object> assetMap = new Dictionary<string, UnityEngine.Object>();
        for (int i = 0; i < allDepen.Length; ++i)
        {
            //实例化不出来且卡,直接采用字符串加载方式
            //UnityEngine.Object obj = ab.LoadAsset(allDepen[i]);
            //if (obj != null && assetTypeList.Contains(obj.GetType()))
            //    TryAddAssetToMap(obj.name, allDepen[i], abName, GetObjectType(obj));

            //直接加字符串
            string[] typename = allDepen[i].Split('.');
            TryAddAssetToMap(allDepen[i], allDepen[i], abName, typename[typename.Length-1]);
        }
    }
    
    /// <summary>
    /// 加入到字典保存标记
    /// </summary>
    /// <param name="assetName">资源名</param>
    /// <param name="assetPath">散资源路径,作为key</param>
    /// <param name="abName">ab包名</param>
    /// <param name="type">类型</param>
    private void TryAddAssetToMap(string assetName, string assetPath, string abName, string type)
    {
        if (_AssetMap.ContainsKey(assetPath))
        {
            AssetInfo assetInfo = _AssetMap[assetPath];
            if (!assetInfo.referenceABNames.Contains(abName))
            {
                assetInfo.referenceCount += 1;
                assetInfo.referenceABNames += "`" + abName + "` ";
                _AssetMap[assetPath] = assetInfo;
            }
        }
        else
        {
            AddAssetToMap(assetName, assetPath, abName, type);
        }
    }

    private void AddAssetToMap(string assetName, string assetPath, string abName, string type)
    {
        AssetInfo assetInfo = new AssetInfo();
        assetInfo.name = assetName;
        assetInfo.abType = type;
        assetInfo.referenceCount += 1;
        assetInfo.referenceABNames += "`" + abName + "` ";
        _AssetMap.Add(assetPath, assetInfo);
    }

markdown文件

在这里插入图片描述

修改后源码:
https://github.com/luoyikun/UnityForTest
ABRedundancyChecker

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值