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;
}
}
}