public TBundle(string key, AssetBundle ab) { this.ab = ab; this.key = key; if (this.key.StartsWith("atlas/")) { aType = E_AssetType.Atlas; useTime = TimerUtils.getSecTimer(); } }
/// <summary> /// 获取相同类型的资产数量 /// </summary> public int GetAssetCount(E_AssetType assetType) { int count = 0; int length = _depAssetFiles.Count; for (int i = 0; i < length; i++) { var info = _depAssetFiles[i]; if (info._assetType == assetType) { count++; } } return(count); }
/// <summary> /// 得到某一类型的子资源列表 /// </summary> public void FindAssetFiles(List <EAssetFileInfo> assets, E_AssetType assetType) { assets.Clear(); int length = _depAssetFiles.Count; for (int i = 0; i < length; i++) { var info = _depAssetFiles[i]; if (info._assetType == assetType) { assets.Add(info); } } }
public static EAssetFileInfo FindAssetFile(long guid, long size, E_AssetType type) { if (_assetFileInfos == null) { _assetFileInfos = new Dictionary <EAssetFileInfoKey, EAssetFileInfo>(); } EAssetFileInfo info; sKey.Guid = guid; sKey.AssetType = type; sKey.Size = size; if (!_assetFileInfos.TryGetValue(sKey, out info)) { info = new EAssetFileInfo(guid); EAssetFileInfoKey newKey = sKey.CopyInfo(); _assetFileInfos.Add(newKey, info); } return(info); }
public static void AppendType(StringBuilder sb, EAssetBundleFileInfo abFileInfo, E_AssetType assetType, bool isEdundance, string des) { List <EAssetFileInfo> assetFiles = new List <EAssetFileInfo>(); abFileInfo.FindAssetFiles(assetFiles, assetType); if (assetFiles.Count == 0) { return; } float allSize = 0; int length = assetFiles.Count; for (int i = 0; i < length; i++) { bool result = assetFiles[i]._includedBundles.Count > 1; if (result == isEdundance) { allSize += assetFiles[i].GetMemorySize(); } } sb.Append(",," + des + "(" + allSize + ")"); for (int i = 0; i < length; i++) { bool result = assetFiles[i]._includedBundles.Count > 1; if (result == isEdundance) { string tmpSize = (assetFiles[i].GetMemorySize()).ToString("f2"); sb.Append("," + assetFiles[i]._assetName + "(" + tmpSize + "Kb)"); } } sb.AppendLine(); }
public static void AppendType0(StringBuilder sb, EAssetBundleFileInfo abFileInfo, E_AssetType assetType, bool isEdundance, string des) { List <EAssetFileInfo> assetFiles = new List <EAssetFileInfo>(); abFileInfo.FindAssetFiles(assetFiles, assetType); if (assetFiles.Count == 0) { return; } sb.Append(",," + des); int length = assetFiles.Count; for (int i = 0; i < length; i++) { bool result = assetFiles[i]._includedBundles.Count > 1; if (result == isEdundance) { sb.Append("," + assetFiles[i]._assetName); } } sb.AppendLine(); }
// 分析Asset Object信息 private static void AnalyzeAssetObject(Object assetObject, EAssetBundleFileInfo assetbundleFileInfo) { bool inBuilt = false; // 1.检测类型需要符合要求 E_AssetType assetType = AssetBundleAnallyzeObject.CheckObject(assetObject, assetbundleFileInfo, ref inBuilt); long size = EMemorySizeHelper.GetRuntimeMemorySize(assetObject); if (assetType == E_AssetType.NONE) { return; } if (_inspectorMode == null) { _inspectorMode = typeof(SerializedObject).GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance); } // 得到guid SerializedObject serializedObject = new SerializedObject(assetObject); if (_inspectorMode != null) { _inspectorMode.SetValue(serializedObject, InspectorMode.Debug, null); } SerializedProperty pathIdProp = serializedObject.FindProperty(EAssetBundleConst.LOCAL_ID_DENTFIER_IN_FILE); if (pathIdProp == null) { Debug.LogError("得到Id失败:" + assetbundleFileInfo.AbName + "_" + assetObject); return; } long guid = pathIdProp.longValue; List <KeyValuePair <string, System.Object> > propertys = new List <KeyValuePair <string, object> >(); if (AssetBundleAnallyzeObject._funMap.ContainsKey(assetType)) { propertys.AddRange(AssetBundleAnallyzeObject._funMap[assetType].Invoke(assetObject, serializedObject)); } if (assetbundleFileInfo.IsAssetContain(guid)) { Debug.LogAssertionFormat("[{0}]已经存在了[{1}]资源", assetbundleFileInfo.AbName, assetObject.name); serializedObject.Dispose(); return; } if (assetType == E_AssetType.TEXTURE) { size = (long)propertys[5].Value; } EAssetFileInfo assetFileInfo = FindAssetFile(guid, size, assetType); assetFileInfo._memorysize = size; assetFileInfo.InitAsset = true; assetFileInfo._assetName = assetObject.name; assetFileInfo._assetType = assetType; assetFileInfo._inBuilt = inBuilt; assetFileInfo._propertys = propertys; if (assetObject.name.Contains("11001_N") && assetType == E_AssetType.TEXTURE) { string path = AssetDatabase.GetAssetPath(assetObject); Debug.Log("guid:" + guid + "_" + assetbundleFileInfo.AbName + "_" + EMemorySizeHelper.GetRuntimeMemorySize(assetObject) + "_" + size + "_" + path); } // AssetBundle包含了Asset资源 assetbundleFileInfo.AddDepAssetFile(assetFileInfo); // Asset被指定的AssetBundle引用 assetFileInfo.AddParent(assetbundleFileInfo); serializedObject.Dispose(); AssetRepeatReport.AddAssetFile(assetFileInfo); }