using System; using System.Collections.Generic; using UnityEditor.Build.Pipeline.Interfaces; using UnityEditor.Build.Pipeline.Tasks; namespace UnityEditor.Build.Pipeline { /// /// Basic static class containing preset build pipeline task collections. /// public static class DefaultBuildTasks { /// /// Enum of the different preset build pipelines /// public enum Preset { PlayerScriptsOnly, AssetBundleCompatible, AssetBundleBuiltInShaderExtraction, } /// /// Constructs and returns an IList containing the build tasks in the correct order for the preset build pipeline. /// /// The preset build pipeline to construct and return. /// The boolean to allow bypassing script compilation of a preset build pipeline if supported. /// IList containing the build tasks in the correct order for the preset build pipeline. public static IList Create(Preset preset) { switch (preset) { case Preset.PlayerScriptsOnly: return PlayerScriptsOnly(); case Preset.AssetBundleCompatible: return AssetBundleCompatible(); case Preset.AssetBundleBuiltInShaderExtraction: return AssetBundleBuiltInShaderExtraction(); default: throw new NotImplementedException(string.Format("Preset for '{0}' not yet implemented.", preset)); } } static IList PlayerScriptsOnly() { var buildTasks = new List(); // Setup buildTasks.Add(new SwitchToBuildPlatform()); // Player Scripts buildTasks.Add(new BuildPlayerScripts()); buildTasks.Add(new PostScriptsCallback()); // Dependency // - Empty // Packing // - Empty // Writing // - Empty return buildTasks; } static IList AssetBundleCompatible() { var buildTasks = new List(); // Setup buildTasks.Add(new SwitchToBuildPlatform()); buildTasks.Add(new RebuildSpriteAtlasCache()); // Player Scripts buildTasks.Add(new BuildPlayerScripts()); buildTasks.Add(new PostScriptsCallback()); // Dependency buildTasks.Add(new CalculateSceneDependencyData()); buildTasks.Add(new CalculateAssetDependencyData()); buildTasks.Add(new StripUnusedSpriteSources()); buildTasks.Add(new PostDependencyCallback()); // Packing buildTasks.Add(new GenerateBundlePacking()); buildTasks.Add(new GenerateBundleCommands()); buildTasks.Add(new GenerateSubAssetPathMaps()); buildTasks.Add(new GenerateBundleMaps()); buildTasks.Add(new PostPackingCallback()); // Writing buildTasks.Add(new WriteSerializedFiles()); buildTasks.Add(new ArchiveAndCompressBundles()); buildTasks.Add(new AppendBundleHash()); buildTasks.Add(new PostWritingCallback()); // Generate manifest files // TODO: IMPL manifest generation return buildTasks; } static IList AssetBundleBuiltInShaderExtraction() { var buildTasks = new List(); // Setup buildTasks.Add(new SwitchToBuildPlatform()); buildTasks.Add(new RebuildSpriteAtlasCache()); // Player Scripts buildTasks.Add(new BuildPlayerScripts()); buildTasks.Add(new PostScriptsCallback()); // Dependency buildTasks.Add(new CalculateSceneDependencyData()); buildTasks.Add(new CalculateAssetDependencyData()); buildTasks.Add(new StripUnusedSpriteSources()); buildTasks.Add(new CreateBuiltInShadersBundle("UnityBuiltInShaders.bundle")); buildTasks.Add(new PostDependencyCallback()); // Packing buildTasks.Add(new GenerateBundlePacking()); buildTasks.Add(new UpdateBundleObjectLayout()); buildTasks.Add(new GenerateBundleCommands()); buildTasks.Add(new GenerateSubAssetPathMaps()); buildTasks.Add(new GenerateBundleMaps()); buildTasks.Add(new PostPackingCallback()); // Writing buildTasks.Add(new WriteSerializedFiles()); buildTasks.Add(new ArchiveAndCompressBundles()); buildTasks.Add(new AppendBundleHash()); buildTasks.Add(new PostWritingCallback()); // Generate manifest files // TODO: IMPL manifest generation return buildTasks; } } }