public static AssetBundleBuildsManifest BuildAssetBundles(string outputDir, BuildAssetBundleOptions buildOption, BuildTarget targetPlatform) { #if ASSET_BUNDLE_BUILD_TIME_CHECK float startTime = Time.realtimeSinceStartup; #endif AssetBundleBuildsManifest manifest = new AssetBundleBuildsManifest(); AssetBundleManifest unityManifest = null; // append AllAssetBundleInformation allAssetBundleInfo = GetAllAssetBundleInfoList(); int allAssetBundleCount = AssetDatabase.GetAllAssetBundleNames().Length; // List <AssetBundleBuild> buildTargetBuffer = new List <AssetBundleBuild>(); #if ASSET_BUNDLE_BUILD_TIME_CHECK float groupingComplete = Time.realtimeSinceStartup; #endif /// Build NoDependAssetBundles int idx = 0; foreach (var noDependAssetBundle in allAssetBundleInfo.noDependList) { string assetBundleName = noDependAssetBundle.assetBundleName; buildTargetBuffer.Add(CreateAssetBundleBuildFromAssetBundleName(assetBundleName)); if (buildTargetBuffer.Count > BulkConvertNum) { #if ASSET_BUNDLE_GROUPING_DEBUG DebugPrintBuildPipeline(buildTargetBuffer); #endif unityManifest = BuildPipeline.BuildAssetBundles(outputDir, buildTargetBuffer.ToArray(), buildOption, targetPlatform); manifest.AddUnityManifest(unityManifest); buildTargetBuffer.Clear(); } ++idx; EditorUtility.DisplayProgressBar("process no dependence bundles", assetBundleName, (float)idx / (float)allAssetBundleCount); } if (buildTargetBuffer.Count > 0) { #if ASSET_BUNDLE_GROUPING_DEBUG DebugPrintBuildPipeline(buildTargetBuffer); #endif unityManifest = BuildPipeline.BuildAssetBundles(outputDir, buildTargetBuffer.ToArray(), buildOption, targetPlatform); manifest.AddUnityManifest(unityManifest); buildTargetBuffer.Clear(); } // group set var dependGroupList = new List <List <AssetBundleInfoWithDepends> >(allAssetBundleInfo.dependGroup.Values); int length = dependGroupList.Count; for (int i = 0; i < length; ++i) { string assetBundleName = ""; foreach (var assetBundle in dependGroupList[i]) { assetBundleName = assetBundle.assetBundleName; buildTargetBuffer.Add(CreateAssetBundleBuildFromAssetBundleName(assetBundleName)); ++idx; } bool buildFlag = false; buildFlag |= (buildTargetBuffer.Count > BulkConvertNum); buildFlag |= (i == length - 1); if (i < length - 1) { buildFlag |= (dependGroupList[i + 1].Count > BulkConvertNum); } if (buildFlag) { #if ASSET_BUNDLE_GROUPING_DEBUG DebugPrintBuildPipeline(buildTargetBuffer); #endif unityManifest = BuildPipeline.BuildAssetBundles(outputDir, buildTargetBuffer.ToArray(), buildOption, targetPlatform); manifest.AddUnityManifest(unityManifest); buildTargetBuffer.Clear(); } EditorUtility.DisplayProgressBar("process dependence", "group " + i + " " + assetBundleName, (float)idx / (float)allAssetBundleCount); } EditorUtility.ClearProgressBar(); #if ASSET_BUNDLE_BUILD_TIME_CHECK float buildCompleteTime = Time.realtimeSinceStartup; UnityEngine.Debug.Log("All BuildTime:" + (buildCompleteTime - startTime) + "sec\n" + "GroupingTime:" + (groupingComplete - startTime) + "sec\n" + "AssetBundleBuild:" + (buildCompleteTime - groupingComplete) + "sec\n"); #endif return(manifest); }
public static void BuildSingleManifest(string outputBundleDir, string outputAssetDir, string manifestBundleName, AssetBundleBuildsManifest manifest, BuildAssetBundleOptions buildOption, BuildTarget targetPlatform) { string manifestAssetPath = System.IO.Path.Combine(outputAssetDir, manifestBundleName); manifestAssetPath += ".asset"; AssetDatabase.CreateAsset(manifest, manifestAssetPath); AssetDatabase.SaveAssets(); AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = manifestBundleName; build.assetNames = new string[] { manifestAssetPath }; BuildPipeline.BuildAssetBundles(outputBundleDir, new AssetBundleBuild[] { build }, buildOption, targetPlatform); }