public static void Build() { var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds()); var buildParams = new CustomBuildParameters(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup, "Assets/StreamingAssets"); // set three different Assetbundles to be the different compression options available buildParams.m_PerBundleCompression.Add("textures", BuildCompression.LZMA); buildParams.m_PerBundleCompression.Add("objects", BuildCompression.LZ4); buildParams.m_PerBundleCompression.Add("prefabs", BuildCompression.Uncompressed); buildParams.BundleCompression = BuildCompression.LZMA; IBundleBuildResults results; ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results); Debug.Log("Building per bundle completed with " + exitCode); }
#pragma warning restore 649 public ReturnCode Run() { if (m_Parameters is CustomBuildParameters) { CustomBuildParameters custom = m_Parameters as CustomBuildParameters; foreach (KeyValuePair <string, string> pair in custom.m_PerBundleBuildFolder) { string fromP = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + m_Parameters.GetOutputFilePathForIdentifier(pair.Key); string toP = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + string.Format("{0}/{1}", pair.Value, pair.Key); string directory = toP.Substring(0, toP.LastIndexOf('/')); Directory.CreateDirectory(directory); File.Move(fromP, toP); } } return(ReturnCode.Success); }
public static void Build() { var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds()); var buildParams = new CustomBuildParameters(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup, "Assets/StreamingAssets"); // This is a part of the CustomBuildParameters class that override the outputFolder on a per AssetBundle basic buildParams.m_PerBundleBuildFolder.Add("textures", "Assets/StreamingAssets/OtherFolder"); // This is a part of the CustomBuildParameters class that ignores the outputFolder, and gives a direct location, including the filename. On a per AssetBundle basic buildParams.m_PerBundleAbsolutePath.Add("prefabs", Application.dataPath.Substring(0, Application.dataPath.Length - 6) + "myPrefabObjects.ab"); buildParams.BundleCompression = BuildCompression.LZMA; List <IBuildTask> taskList = DefaultBuildTasks.Create(DefaultBuildTasks.Preset.AssetBundleBuiltInShaderExtraction) as List <IBuildTask>; //taskList.Add( new MoveAssetBundles() ); // no longer needed from "1.2.3-preview" as can use taskList.Add(new RefreshAssetDatabase()); IBundleBuildResults results; ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results, taskList); Debug.Log("Building per bundle completed with " + exitCode); }
public static void BuildAssetBundles(AssetbundleBuildSettings settings, BuildType buildType) { if (!Application.isBatchMode) { //have to ask save current scene var saved = UnityEditor.SceneManagement.EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); if (!saved) { EditorUtility.DisplayDialog("Build Failed!", $"User Canceled", "Confirm"); return; } } var bundleList = GetAssetBundlesList(settings); var buildTarget = EditorUserBuildSettings.activeBuildTarget; var groupTarget = BuildPipeline.GetBuildTargetGroup(buildTarget); var outputPath = Utility.CombinePath(buildType == BuildType.Local ? settings.LocalOutputPath : settings.RemoteOutputPath, buildTarget.ToString()); //generate sharedBundle if needed, and pre generate dependency var treeResult = AssetDependencyTree.ProcessDependencyTree(bundleList); if (settings.AutoCreateSharedBundles) { bundleList.AddRange(treeResult.SharedBundles); } var buildParams = new CustomBuildParameters(settings, buildTarget, groupTarget, outputPath, treeResult.BundleDependencies, buildType); buildParams.UseCache = !settings.ForceRebuild; if (buildParams.UseCache && settings.UseCacheServer) { buildParams.CacheServerHost = settings.CacheServerHost; buildParams.CacheServerPort = settings.CacheServerPort; } ContentPipeline.BuildCallbacks.PostPackingCallback += PostPackingForSelectiveBuild; var returnCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(bundleList.ToArray()), out var results); ContentPipeline.BuildCallbacks.PostPackingCallback -= PostPackingForSelectiveBuild; if (returnCode == ReturnCode.Success) { //only remote bundle build generates link.xml switch (buildType) { case BuildType.Local: WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); if (!Application.isBatchMode) { EditorUtility.DisplayDialog("Build Succeeded!", "Local bundle build succeeded!", "Confirm"); } break; case BuildType.Remote: WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); var linkPath = TypeLinkerGenerator.Generate(settings, results); if (!Application.isBatchMode) { EditorUtility.DisplayDialog("Build Succeeded!", $"Remote bundle build succeeded, \n {linkPath} updated!", "Confirm"); } if (settings.AutoUploadS3) { LocusAssetbundleUploaderExtension.UploadToS3Bucket(settings); } break; } } else { EditorUtility.DisplayDialog("Build Failed!", $"Bundle build failed, \n Code : {returnCode}", "Confirm"); Debug.LogError(returnCode); } }
public static void BuildAssetBundles(AssetbundleBuildSettings settings, BuildType buildType) { var bundleList = new List <AssetBundleBuild>(); foreach (var setting in settings.BundleSettings) { var folderPath = AssetDatabase.GUIDToAssetPath(setting.Folder.guid); var dir = new DirectoryInfo(Path.Combine(Application.dataPath, folderPath.Remove(0, 7))); if (!dir.Exists) { throw new Exception($"Could not found Path {folderPath} for {setting.BundleName}"); } var assetPathes = new List <string>(); var loadPathes = new List <string>(); AssetbundleBuildSettings.GetFilesInDirectory(string.Empty, assetPathes, loadPathes, dir, setting.IncludeSubfolder); if (assetPathes.Count == 0) { Debug.LogWarning($"Could not found Any Assets {folderPath} for {setting.BundleName}"); } var newBundle = new AssetBundleBuild(); newBundle.assetBundleName = setting.BundleName; newBundle.assetNames = assetPathes.ToArray(); newBundle.addressableNames = loadPathes.ToArray(); bundleList.Add(newBundle); } var buildTarget = EditorUserBuildSettings.activeBuildTarget; var groupTarget = BuildPipeline.GetBuildTargetGroup(buildTarget); var outputPath = Path.Combine(buildType == BuildType.Local ? settings.LocalOutputPath : settings.RemoteOutputPath, buildTarget.ToString()); var buildParams = new CustomBuildParameters(settings, buildTarget, groupTarget, outputPath, buildType == BuildType.Local); buildParams.UseCache = !settings.ForceRebuild; if (buildParams.UseCache && settings.UseCacheServer) { buildParams.CacheServerHost = settings.CacheServerHost; buildParams.CacheServerPort = settings.CacheServerPort; } s_CurrentBuildingSettings = settings; s_CurrentBuildType = buildType; ContentPipeline.BuildCallbacks.PostPackingCallback += PostPackingForSelectiveBuild; var returnCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(bundleList.ToArray()), out var results); ContentPipeline.BuildCallbacks.PostPackingCallback -= PostPackingForSelectiveBuild; if (buildType == BuildType.Dry) { EditorUtility.DisplayDialog("Build Succeeded!", "Dry bundle build succeeded!", "Confirm"); return; } if (returnCode == ReturnCode.Success) { WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); //only remote bundle build generates link.xml switch (buildType) { case BuildType.Local: EditorUtility.DisplayDialog("Build Succeeded!", "Local bundle build succeeded!", "Confirm"); break; case BuildType.Remote: var linkPath = TypeLinkerGenerator.Generate(settings, results); EditorUtility.DisplayDialog("Build Succeeded!", $"Remote bundle build succeeded, \n {linkPath} updated!", "Confirm"); break; case BuildType.Dry: EditorUtility.DisplayDialog("Build Succeeded!", $"Dry bundle build succeeded", "Confirm"); break; } } else { EditorUtility.DisplayDialog("Build Failed!", $"Bundle build failed, \n Code : {returnCode}", "Confirm"); Debug.LogError(returnCode); } }