예제 #1
0
 public static int CompareSizeDown(SAssetMemoryInfo x, SAssetMemoryInfo y)
 {
     return y.memorySize - x.memorySize;
 }
예제 #2
0
    /// <summary>
    /// 获取指定资源自己以及其所有依赖项所占有的资源内存量
    /// </summary>
    /// <param name="assetPath"></param>
    /// <returns></returns>
    public static int GetTotalDependAssetMemory(string assetPath, List<SAssetMemoryInfo> ltMemoryInfo = null)
    {
        string[] arrDepAssetPath = AssetDatabase.GetDependencies(new string[] { assetPath });
        int nTotal = 0;
        foreach (string depAssetPath in arrDepAssetPath)
        {
            if (!depAssetPath.Contains(".unity"))
            {
                UnityEngine.Object[] arrObj = AssetDatabase.LoadAllAssetsAtPath(depAssetPath);
                if (arrObj == null)
                    continue;
                foreach (UnityEngine.Object assetObj in arrObj)
                {
                    if (assetObj == null)
                        continue;

                    System.Type assetType = assetObj.GetType();
                    if (typeof(Mesh).IsAssignableFrom(assetType)
                        || typeof(Texture).IsAssignableFrom(assetType)
                        || typeof(AudioClip).IsAssignableFrom(assetType)
                        || typeof(Animation).IsAssignableFrom(assetType)
                        || typeof(AnimationClip).IsAssignableFrom(assetType)
                        || typeof(Material).IsAssignableFrom(assetType))
                    {
                        if (assetObj.name.Contains("__preview")
                            || assetObj.name == "Take 001")
                            continue;

                        if (assetObj.name == "" && typeof(AnimationClip).IsAssignableFrom(assetType))
                            continue;// 忽略一个空名字的动画 [2/18/2014 yao]

                        int nMemory = Profiler.GetRuntimeMemorySize(assetObj);
                        nTotal += nMemory;
                        //Debug.Log("asset\t" + assetObj.ToString() + "\tsize\t" + nMemory.ToString());
                        if (ltMemoryInfo != null)
                        {
                            SAssetMemoryInfo info = new SAssetMemoryInfo();
                            info.assetPath = depAssetPath;
                            info.assetObject = assetObj;
                            info.memorySize = nMemory;
                            ltMemoryInfo.Add(info);
                        }
                    }
                }
            }
        }
        return nTotal;
    }