com.alicizax.unity.tuyoogam.../Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs

63 lines
2.9 KiB
C#
Raw Normal View History

2025-01-09 11:31:04 +08:00
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Build.Pipeline;
using UnityEditor.Build.Pipeline.Interfaces;
using UnityEditor.Build.Pipeline.Tasks;
namespace YooAsset.Editor
{
public class TaskBuilding_SBP : IBuildTask
{
public class BuildResultContext : IContextObject
{
public IBundleBuildResults Results;
2025-02-28 16:11:01 +08:00
public string BuiltinShadersBundleName;
public string MonoScriptsBundleName;
2025-01-09 11:31:04 +08:00
}
void IBuildTask.Run(BuildContext context)
{
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var buildMapContext = context.GetContextObject<BuildMapContext>();
var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters;
// 构建内容
var buildContent = new BundleBuildContent(buildMapContext.GetPipelineBuilds());
// 开始构建
IBundleBuildResults buildResults;
var buildParameters = scriptableBuildParameters.GetBundleBuildParameters();
2025-02-28 16:11:01 +08:00
string builtinShadersBundleName = scriptableBuildParameters.BuiltinShadersBundleName;
string monoScriptsBundleName = scriptableBuildParameters.MonoScriptsBundleName;
var taskList = SBPBuildTasks.Create(builtinShadersBundleName, monoScriptsBundleName);
2025-01-09 11:31:04 +08:00
ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out buildResults, taskList);
if (exitCode < 0)
{
string message = BuildLogger.GetErrorMessage(ErrorCode.UnityEngineBuildFailed, $"UnityEngine build failed ! ReturnCode : {exitCode}");
throw new Exception(message);
}
2025-02-28 16:11:01 +08:00
// 说明:解决因为特殊资源包导致验证失败。
2025-01-09 11:31:04 +08:00
// 例如:当项目里没有着色器,如果有依赖内置着色器就会验证失败。
2025-02-28 16:11:01 +08:00
if (string.IsNullOrEmpty(builtinShadersBundleName) == false)
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
if (buildResults.BundleInfos.ContainsKey(builtinShadersBundleName))
buildMapContext.CreateEmptyBundleInfo(builtinShadersBundleName);
}
if (string.IsNullOrEmpty(monoScriptsBundleName) == false)
{
if (buildResults.BundleInfos.ContainsKey(monoScriptsBundleName))
buildMapContext.CreateEmptyBundleInfo(monoScriptsBundleName);
2025-01-09 11:31:04 +08:00
}
BuildLogger.Log("UnityEngine build success!");
BuildResultContext buildResultContext = new BuildResultContext();
buildResultContext.Results = buildResults;
2025-02-28 16:11:01 +08:00
buildResultContext.BuiltinShadersBundleName = builtinShadersBundleName;
buildResultContext.MonoScriptsBundleName = monoScriptsBundleName;
2025-01-09 11:31:04 +08:00
context.SetContextObject(buildResultContext);
}
}
}