public virtual void Export() { this.Analyze(); Dictionary <string, AssetBundleBuild> dic = new Dictionary <string, AssetBundleBuild>(); //标记所有 asset bundle name var all = AssetBundleUtils.GetAll(); for (int i = 0; i < all.Count; i++) { AssetTarget target = all[i]; if (target.NeedSelfExport) { string assetName = target.assetPath.Replace('\\', '/'); if (dic.ContainsKey(target.bundleName)) { AssetBundleBuild build = dic[target.bundleName]; string[] ans = new string[build.assetNames.Length + 1]; for (int j = 0; j < build.assetNames.Length; j++) { ans[j] = build.assetNames[j]; } ans[build.assetNames.Length] = assetName; build.assetNames = ans; dic[target.bundleName] = build; } else { AssetBundleBuild build = new AssetBundleBuild() { assetBundleName = target.bundleName, assetNames = new string[] { assetName }, }; dic[target.bundleName] = build; } } } AssetBundleBuild[] builds = dic.Values.ToArray(); //开始打包 AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(pathResolver.BundleSavePath, builds, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget); // CheckAssetBundleName(manifest, builds); SaveFileList(builds); //移除无用资源 RemoveUnused(manifest); // AssetDatabase.RemoveUnusedAssetBundleNames(); AssetDatabase.Refresh(); }
public virtual void Analyze() { var all = AssetBundleUtils.GetAll(); foreach (AssetTarget target in all) { target.Analyze(); } all = AssetBundleUtils.GetAll(); foreach (AssetTarget target in all) { target.Merge(); } all = AssetBundleUtils.GetAll(); foreach (AssetTarget target in all) { target.AnalyzeBundleName(); } foreach (AssetTarget target in all) { target.BeforeExport(); } }