public static BuildPipelineCodes Build(BuildInput input, BuildSettings settings, out BuildDependencyInformation buildInfo, bool useCache = false, BuildProgressTracker progressTracker = null) { buildInfo = null; // Rebuild sprite atlas cache for correct dependency calculation & writing var spriteCacher = new SpriteAtlasCacher(useCache, progressTracker); var exitCode = spriteCacher.Convert(settings.target); if (exitCode < BuildPipelineCodes.Success) return exitCode; // Generate dependency information for all assets in BuildInput var buildInputDependency = new BuildInputDependency(useCache, progressTracker); exitCode = buildInputDependency.Convert(input, settings, out buildInfo); if (exitCode < BuildPipelineCodes.Success) return exitCode; return exitCode; }
internal static AssetBundleManifest BuildAssetBundles_Internal(string outputPath, BuildInput buildInput, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform) { var playerSettings = PlayerBuildPipeline.GeneratePlayerBuildSettings(targetPlatform); ScriptCompilationResult scriptResults; var errorCode = PlayerBuildPipeline.BuildPlayerScripts(playerSettings, out scriptResults); if (errorCode < BuildPipelineCodes.Success) { return(null); } var bundleSettings = BundleBuildPipeline.GenerateBundleBuildSettings(scriptResults.typeDB, targetPlatform); BuildCompression compression = BuildCompression.DefaultLZMA; if ((assetBundleOptions & BuildAssetBundleOptions.ChunkBasedCompression) != 0) { compression = BuildCompression.DefaultLZ4; } else if ((assetBundleOptions & BuildAssetBundleOptions.UncompressedAssetBundle) != 0) { compression = BuildCompression.DefaultUncompressed; } var useCache = (assetBundleOptions & BuildAssetBundleOptions.ForceRebuildAssetBundle) == 0; BundleBuildResult result; errorCode = BundleBuildPipeline.BuildAssetBundles(buildInput, bundleSettings, compression, outputPath, out result, useCache); if (errorCode < BuildPipelineCodes.Success) { return(null); } // TODO: Unity 5 Manifest return(null); }
public static bool GenerateBuildInput(this AddressableAssetSettings settings, out BuildInput input) { return(new AddressableAssetPacker().Convert(settings.GetEntries(), out input, false)); }
public static BuildPipelineCodes BuildAssetBundles(BuildInput input, BuildSettings settings, BuildCompression compression, string outputFolder, out BuildResultInfo result, object callbackUserData = null, bool useCache = true) { var buildTimer = new Stopwatch(); buildTimer.Start(); if (ProjectValidator.HasDirtyScenes()) { result = new BuildResultInfo(); buildTimer.Stop(); BuildLogger.LogError("Build Asset Bundles failed in: {0:c}. Error: {1}.", buildTimer.Elapsed, BuildPipelineCodes.UnsavedChanges); return(BuildPipelineCodes.UnsavedChanges); } var exitCode = BuildPipelineCodes.Success; result = new BuildResultInfo(); AssetDatabase.SaveAssets(); // TODO: Until new AssetDatabaseV2 is online, we need to switch platforms EditorUserBuildSettings.SwitchActiveBuildTarget(settings.group, settings.target); var stepCount = BundleDependencyStep.StepCount + BundlePackingStep.StepCount + BundleWritingStep.StepCount; using (var progressTracker = new BuildProgressTracker(stepCount)) { using (var buildCleanup = new BuildStateCleanup(true, kTempBundleBuildPath)) { BuildDependencyInfo buildInfo; exitCode = BundleDependencyStep.Build(input, settings, out buildInfo, useCache, progressTracker); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } if (PostBuildDependency != null) { exitCode = PostBuildDependency.Invoke(buildInfo, callbackUserData); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } } BuildWriteInfo writeInfo; exitCode = BundlePackingStep.Build(buildInfo, out writeInfo, useCache, progressTracker); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } if (PostBuildPacking != null) { exitCode = PostBuildPacking.Invoke(buildInfo, writeInfo, callbackUserData); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } } exitCode = BundleWritingStep.Build(settings, compression, outputFolder, buildInfo, writeInfo, out result, useCache, progressTracker); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } if (PostBuildWriting != null) { exitCode = PostBuildWriting.Invoke(buildInfo, writeInfo, result, callbackUserData); if (exitCode < BuildPipelineCodes.Success) { return(exitCode); } } } } buildTimer.Stop(); if (exitCode >= BuildPipelineCodes.Success) { BuildLogger.Log("Build Asset Bundles successful in: {0:c}", buildTimer.Elapsed); } else if (exitCode == BuildPipelineCodes.Canceled) { BuildLogger.LogWarning("Build Asset Bundles canceled in: {0:c}", buildTimer.Elapsed); } else { BuildLogger.LogError("Build Asset Bundles failed in: {0:c}. Error: {1}.", buildTimer.Elapsed, exitCode); } return(exitCode); }
public static BuildCommandSet GenerateBuildCommandSet(BuildInput input, BuildSettings settings) { // Rebuild sprite atlas cache for correct dependency calculation Packer.RebuildAtlasCacheIfNeeded(settings.target, true, Packer.Execution.Normal); // Need to specal case sprites as we only want to include the source texutre in certain situations m_SpriteMap.Clear(); // Create commands array matching the size of the input var commandSet = new BuildCommandSet(); commandSet.commands = new BuildCommandSet.Command[input.definitions.Length]; for (var i = 0; i < input.definitions.Length; ++i) { var definition = input.definitions[i]; // Populate each command from asset bundle definition var command = new BuildCommandSet.Command(); command.assetBundleName = definition.assetBundleName; command.explicitAssets = new BuildCommandSet.AssetLoadInfo[definition.explicitAssets.Length]; // Fill out asset load info and references for each asset in the definition var allObjects = new HashSet <ObjectIdentifier>(); for (var j = 0; j < definition.explicitAssets.Length; ++j) { var explicitAsset = new BuildCommandSet.AssetLoadInfo(); explicitAsset.asset = definition.explicitAssets[j]; explicitAsset.path = AssetDatabase.GUIDToAssetPath(explicitAsset.asset.ToString()); explicitAsset.includedObjects = AssetBundleBuildInterface.GetObjectIdentifiersInAsset(definition.explicitAssets[j]); explicitAsset.referencedObjects = AssetBundleBuildInterface.GetPlayerDependenciesForObjects(explicitAsset.includedObjects); // Is this asset a sprite? var type = AssetDatabase.GetMainAssetTypeAtPath(explicitAsset.path); if (type == typeof(Texture2D) && explicitAsset.referencedObjects.Length == 1) { // Source texture should always be the first included object, atlas should always be the first referenced object m_SpriteMap[explicitAsset.referencedObjects[0].guid] = new StriteTextures(explicitAsset.includedObjects[0], explicitAsset.referencedObjects[0], command.assetBundleName); } command.explicitAssets[j] = explicitAsset; allObjects.UnionWith(explicitAsset.includedObjects); allObjects.UnionWith(explicitAsset.referencedObjects); } command.assetBundleObjects = allObjects.ToArray(); commandSet.commands[i] = command; } // TODO: Debug printing DebugPrintCommandSet(ref commandSet); // At this point, We have generated fully self contained asset bundles with 0 dependencies. // Default implementation is to reduce duplication of objects by declaring dependencies to other asset // bundles if that other asset bundle has an explicit asset declared that contains the objects needed // We also remove any built in unity objects as they are built with the player (We may want to change this part in the future) CalculateAssetBundleBuildDependencies(ref commandSet); // Note: I may, or may not feel dirty doing mutable things to what otherwise should be immutable struct // TODO: Debug printing DebugPrintCommandSet(ref commandSet); return(commandSet); }