private void Awake() { if (singleton == null) { singleton = this; } }
//[MenuItem("Optimize Tools/AssetBundle:Finish Building")] static void BreakAssetLink() { //Get downloading manager Scene scene = SceneManager.GetActiveScene(); AssetBundleDownloadingManager manager = null; foreach (var go in scene.GetRootGameObjects()) { manager = go.GetComponentInChildren <AssetBundleDownloadingManager>(); if (manager != null) { break; } } if (manager == null) { Debug.Log("No Downloading Manager found in current scene"); return; } if (manager.buildStatus != AssetBundleDownloadingManager.AssetBundleBuiltStatus.BundleCreated) { Debug.Log("Not in right state to break asset link"); return; } if (!manager.allowBreakAssetsLink) { Debug.Log("Are you certain!!!"); return; } manager.allowBreakAssetsLink = false; foreach (var a in manager.assetBundleAgents) { if (a == null) { continue; } a.backupDirectRelatedAsset = null; } manager.buildStatus = AssetBundleDownloadingManager.AssetBundleBuiltStatus.CleanBuilt; EditorApplication.MarkSceneDirty(); EditorApplication.SaveScene(); AssetDatabase.SaveAssets(); }
//[MenuItem("Optimize Tools/AssetBundle:Cancel Building")] static void CancelAssetBundlesBuild() { //Get downloading manager Scene scene = SceneManager.GetActiveScene(); AssetBundleDownloadingManager manager = null; foreach (var go in scene.GetRootGameObjects()) { manager = go.GetComponentInChildren <AssetBundleDownloadingManager>(); if (manager != null) { break; } } if (manager == null) { Debug.Log("No Downloading Manager found in current scene"); return; } if (manager.buildStatus != AssetBundleDownloadingManager.AssetBundleBuiltStatus.BundleCreated) { Debug.Log("Not in right state to cancel built"); return; } foreach (var a in manager.assetBundleAgents) { if (a == null) { continue; } a.CancelBundle(); } var path = GetAssetBundleLoadingPath(); DeleteDirectory(path); manager.assetBundleAgents.Clear(); manager.buildStatus = AssetBundleDownloadingManager.AssetBundleBuiltStatus.NotBuilt; EditorApplication.MarkSceneDirty(); EditorApplication.SaveScene(); AssetDatabase.SaveAssets(); }
//[MenuItem("Optimize Tools/AssetBundle:Start Building")] static void BuildAssetBundles() { var path = GetAssetBundleLoadingPath(); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } //Get downloading manager Scene scene = SceneManager.GetActiveScene(); AssetBundleDownloadingManager manager = null; foreach (var go in scene.GetRootGameObjects()) { manager = go.GetComponentInChildren <AssetBundleDownloadingManager>(); if (manager != null) { break; } } if (manager == null) { Debug.Log("No Downloading Manager found in current scene"); return; } if (manager.buildStatus != AssetBundleDownloadingManager.AssetBundleBuiltStatus.NotBuilt) { Debug.Log("Has been built before"); return; } //prepare downloading manager data manager.BuildAgency(); bundleDescriptors.Clear(); bundleBuildIndex = 0; List <AssetBundleBuild> buildMaps = new List <AssetBundleBuild>(); foreach (var a in manager.assetBundleAgents) { a.BuildBundle(); } foreach (var b in bundleDescriptors) { AssetBundleBuild buildMap = new AssetBundleBuild(); buildMap.assetBundleName = b.bundleName; List <string> assetNames = new List <string>(); assetNames.Add(AssetDatabase.GetAssetPath(b.mainAsset)); foreach (var r in b.relatedAssets) { assetNames.Add(AssetDatabase.GetAssetPath(r)); } buildMap.assetNames = assetNames.ToArray(); buildMaps.Add(buildMap); } bundleDescriptors.Clear(); BuildPipeline.BuildAssetBundles(path, buildMaps.ToArray(), BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.WebGL); manager.buildStatus = AssetBundleDownloadingManager.AssetBundleBuiltStatus.BundleCreated; EditorApplication.MarkSceneDirty(); EditorApplication.SaveScene(); AssetDatabase.SaveAssets(); }