public static int CompareSizeDown(SAssetMemoryInfo x, SAssetMemoryInfo y) { return y.memorySize - x.memorySize; }
/// <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; }