AssetBundleBuilder.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEditor;
  6. namespace YooAsset.Editor
  7. {
  8. public class AssetBundleBuilder
  9. {
  10. private readonly BuildContext _buildContext = new BuildContext();
  11. /// <summary>
  12. /// 开始构建
  13. /// </summary>
  14. public BuildResult Run(BuildParameters buildParameters)
  15. {
  16. // 清空旧数据
  17. _buildContext.ClearAllContext();
  18. // 检测构建参数是否为空
  19. if (buildParameters == null)
  20. throw new Exception($"{nameof(buildParameters)} is null !");
  21. // 检测可编程构建管线参数
  22. if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
  23. {
  24. if (buildParameters.SBPParameters == null)
  25. throw new Exception($"{nameof(BuildParameters.SBPParameters)} is null !");
  26. if (buildParameters.BuildMode == EBuildMode.DryRunBuild)
  27. throw new Exception($"{nameof(EBuildPipeline.ScriptableBuildPipeline)} not support {nameof(EBuildMode.DryRunBuild)} build mode !");
  28. if (buildParameters.BuildMode == EBuildMode.ForceRebuild)
  29. throw new Exception($"{nameof(EBuildPipeline.ScriptableBuildPipeline)} not support {nameof(EBuildMode.ForceRebuild)} build mode !");
  30. }
  31. // 构建参数
  32. var buildParametersContext = new BuildParametersContext(buildParameters);
  33. _buildContext.SetContextObject(buildParametersContext);
  34. // 是否显示LOG
  35. if (buildParameters.BuildMode == EBuildMode.SimulateBuild)
  36. BuildRunner.EnableLog = false;
  37. else
  38. BuildRunner.EnableLog = true;
  39. // 创建构建节点
  40. List<IBuildTask> pipeline;
  41. if (buildParameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline)
  42. {
  43. pipeline = new List<IBuildTask>
  44. {
  45. new TaskPrepare(), //前期准备工作
  46. new TaskGetBuildMap(), //获取构建列表
  47. new TaskBuilding(), //开始执行构建
  48. new TaskVerifyBuildResult(), //验证构建结果
  49. new TaskEncryption(), //加密资源文件
  50. new TaskCreatePatchManifest(), //创建清单文件
  51. new TaskCreateReport(), //创建报告文件
  52. new TaskCreatePatchPackage(), //制作补丁包
  53. new TaskCopyBuildinFiles(), //拷贝内置文件
  54. };
  55. }
  56. else if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
  57. {
  58. pipeline = new List<IBuildTask>
  59. {
  60. new TaskPrepare(), //前期准备工作
  61. new TaskGetBuildMap(), //获取构建列表
  62. new TaskBuilding_SBP(), //开始执行构建
  63. new TaskVerifyBuildResult_SBP(), //验证构建结果
  64. new TaskEncryption(), //加密资源文件
  65. new TaskCreatePatchManifest(), //创建清单文件
  66. new TaskCreateReport(), //创建报告文件
  67. new TaskCreatePatchPackage(), //制作补丁包
  68. new TaskCopyBuildinFiles(), //拷贝内置文件
  69. };
  70. }
  71. else
  72. {
  73. throw new NotImplementedException();
  74. }
  75. // 执行构建流程
  76. var buildResult = BuildRunner.Run(pipeline, _buildContext);
  77. if (buildResult.Success)
  78. {
  79. buildResult.OutputPackageDirectory = buildParametersContext.GetPackageDirectory();
  80. Debug.Log($"{buildParameters.BuildMode} pipeline build succeed !");
  81. }
  82. else
  83. {
  84. Debug.LogWarning($"{buildParameters.BuildMode} pipeline build failed !");
  85. Debug.LogError($"Build task failed : {buildResult.FailedTask}");
  86. Debug.LogError($"Build task error : {buildResult.FailedInfo}");
  87. }
  88. return buildResult;
  89. }
  90. }
  91. }