public bool RemoveAssetBundle(string assetBundleName, string assetBundleVariant) { Asset[] assetsToRemove = m_AssetBundleCollection.GetAssets(assetBundleName, assetBundleVariant); if (m_AssetBundleCollection.RemoveAssetBundle(assetBundleName, assetBundleVariant)) { List <SourceAsset> unassignedSourceAssets = new List <SourceAsset>(); foreach (Asset asset in assetsToRemove) { SourceAsset sourceAsset = GetSourceAsset(asset.Guid); if (sourceAsset != null) { unassignedSourceAssets.Add(sourceAsset); } } if (OnAssetUnassigned != null) { OnAssetUnassigned(unassignedSourceAssets.ToArray()); } return(true); } return(false); }
public void Analyze() { m_DependencyDatas.Clear(); m_ScatteredAssets.Clear(); m_CircularDependencyDatas.Clear(); m_AnalyzedStamps.Clear(); HashSet <string> scriptAssetNames = GetFilteredAssetNames("t:Script"); Asset[] assets = m_AssetBundleCollection.GetAssets(); int count = assets.Length; for (int i = 0; i < count; i++) { if (OnAnalyzingAsset != null) { OnAnalyzingAsset(i, count); } string assetName = assets[i].Name; if (string.IsNullOrEmpty(assetName)) { Debug.LogWarning(string.Format("Can not find asset by guid '{0}'.", assets[i].Guid)); continue; } DependencyData dependencyData = new DependencyData(); AnalyzeAsset(assetName, assets[i], dependencyData, scriptAssetNames); dependencyData.RefreshData(); m_DependencyDatas.Add(assetName, dependencyData); } foreach (List <Asset> scatteredAsset in m_ScatteredAssets.Values) { scatteredAsset.Sort((a, b) => a.Name.CompareTo(b.Name)); } m_CircularDependencyDatas.AddRange((new CircularDependencyChecker(m_AnalyzedStamps.ToArray())).Check()); if (OnAnalyzeCompleted != null) { OnAnalyzeCompleted(); } }
private AssetBundleBuild[] GetBuildMap() { m_AssetBundleDatas.Clear(); AssetBundle[] assetBundles = m_AssetBundleCollection.GetAssetBundles(); foreach (AssetBundle assetBundle in assetBundles) { m_AssetBundleDatas.Add(assetBundle.FullName.ToLower(), new AssetBundleData(assetBundle.Name.ToLower(), (assetBundle.Variant != null ? assetBundle.Variant.ToLower() : null), assetBundle.LoadType, assetBundle.Optional, assetBundle.GroupTag)); } Asset[] assets = m_AssetBundleCollection.GetAssets(); foreach (Asset asset in assets) { string assetName = asset.Name; if (string.IsNullOrEmpty(assetName)) { m_BuildReport.LogError("Can not find asset by guid '{0}'.", asset.Guid); return(null); } string assetFileFullName = Icarus.GameFramework.Utility.Path.GetCombinePath(Application.dataPath, assetName.Substring(AssetsSubstringLength)); if (!File.Exists(assetFileFullName)) { m_BuildReport.LogError("Can not find asset '{0}'.", assetFileFullName); return(null); } byte[] assetBytes = File.ReadAllBytes(assetFileFullName); int assetHashCode = Icarus.GameFramework.Utility.Converter.GetInt32(Icarus.GameFramework.Utility.Verifier.GetCrc32(assetBytes)); List <string> dependencyAssetNames = new List <string>(); DependencyData dependencyData = m_AssetBundleAnalyzerController.GetDependencyData(assetName); Asset[] dependencyAssets = dependencyData.GetDependencyAssets(); foreach (Asset dependencyAsset in dependencyAssets) { dependencyAssetNames.Add(dependencyAsset.Name); } if (RecordScatteredDependencyAssetsSelected) { dependencyAssetNames.AddRange(dependencyData.GetScatteredDependencyAssetNames()); } dependencyAssetNames.Sort(); m_AssetBundleDatas[asset.AssetBundle.FullName.ToLower()].AddAssetData(asset.Guid, assetName, assetBytes.Length, assetHashCode, dependencyAssetNames.ToArray()); } foreach (AssetBundleData assetBundleData in m_AssetBundleDatas.Values) { if (assetBundleData.AssetCount <= 0) { m_BuildReport.LogError("AssetBundle '{0}' has no asset.", GetAssetBundleFullName(assetBundleData.Name, assetBundleData.Variant)); return(null); } } AssetBundleBuild[] buildMap = new AssetBundleBuild[m_AssetBundleDatas.Count]; int index = 0; foreach (AssetBundleData assetBundleData in m_AssetBundleDatas.Values) { buildMap[index].assetBundleName = assetBundleData.Name; buildMap[index].assetBundleVariant = assetBundleData.Variant; buildMap[index].assetNames = assetBundleData.GetAssetNames(); index++; } return(buildMap); }