using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace YooAsset.Editor { public class AssetBundleBuilder { private readonly BuildContext _buildContext = new BuildContext(); /// <summary> /// 开始构建 /// </summary> public BuildResult Run(BuildParameters buildParameters) { // 清空旧数据 _buildContext.ClearAllContext(); // 检测构建参数是否为空 if (buildParameters == null) throw new Exception($"{nameof(buildParameters)} is null !"); // 检测可编程构建管线参数 if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline) { if (buildParameters.SBPParameters == null) throw new Exception($"{nameof(BuildParameters.SBPParameters)} is null !"); if (buildParameters.BuildMode == EBuildMode.DryRunBuild) throw new Exception($"{nameof(EBuildPipeline.ScriptableBuildPipeline)} not support {nameof(EBuildMode.DryRunBuild)} build mode !"); if (buildParameters.BuildMode == EBuildMode.ForceRebuild) throw new Exception($"{nameof(EBuildPipeline.ScriptableBuildPipeline)} not support {nameof(EBuildMode.ForceRebuild)} build mode !"); } // 构建参数 var buildParametersContext = new BuildParametersContext(buildParameters); _buildContext.SetContextObject(buildParametersContext); // 是否显示LOG if (buildParameters.BuildMode == EBuildMode.SimulateBuild) BuildRunner.EnableLog = false; else BuildRunner.EnableLog = true; // 创建构建节点 List<IBuildTask> pipeline; if (buildParameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline) { pipeline = new List<IBuildTask> { new TaskPrepare(), //前期准备工作 new TaskGetBuildMap(), //获取构建列表 new TaskBuilding(), //开始执行构建 new TaskVerifyBuildResult(), //验证构建结果 new TaskEncryption(), //加密资源文件 new TaskCreatePatchManifest(), //创建清单文件 new TaskCreateReport(), //创建报告文件 new TaskCreatePatchPackage(), //制作补丁包 new TaskCopyBuildinFiles(), //拷贝内置文件 }; } else if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline) { pipeline = new List<IBuildTask> { new TaskPrepare(), //前期准备工作 new TaskGetBuildMap(), //获取构建列表 new TaskBuilding_SBP(), //开始执行构建 new TaskVerifyBuildResult_SBP(), //验证构建结果 new TaskEncryption(), //加密资源文件 new TaskCreatePatchManifest(), //创建清单文件 new TaskCreateReport(), //创建报告文件 new TaskCreatePatchPackage(), //制作补丁包 new TaskCopyBuildinFiles(), //拷贝内置文件 }; } else { throw new NotImplementedException(); } // 执行构建流程 var buildResult = BuildRunner.Run(pipeline, _buildContext); if (buildResult.Success) { buildResult.OutputPackageDirectory = buildParametersContext.GetPackageDirectory(); Debug.Log($"{buildParameters.BuildMode} pipeline build succeed !"); } else { Debug.LogWarning($"{buildParameters.BuildMode} pipeline build failed !"); Debug.LogError($"Build task failed : {buildResult.FailedTask}"); Debug.LogError($"Build task error : {buildResult.FailedInfo}"); } return buildResult; } } }