AssetBundleBuilder.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Reflection;
  5. using System.Linq;
  6. using UnityEngine;
  7. using UnityEditor;
  8. namespace YooAsset.Editor
  9. {
  10. public class AssetBundleBuilder
  11. {
  12. private readonly BuildContext _buildContext = new BuildContext();
  13. /// <summary>
  14. /// 构建资源包
  15. /// </summary>
  16. public BuildResult Run(BuildParameters buildParameters, List<IBuildTask> buildPipeline)
  17. {
  18. // 检测构建参数是否为空
  19. if (buildParameters == null)
  20. throw new Exception($"{nameof(buildParameters)} is null !");
  21. // 检测构建参数是否为空
  22. if (buildPipeline.Count == 0)
  23. throw new Exception($"Build pipeline is empty !");
  24. // 清空旧数据
  25. _buildContext.ClearAllContext();
  26. // 构建参数
  27. var buildParametersContext = new BuildParametersContext(buildParameters);
  28. _buildContext.SetContextObject(buildParametersContext);
  29. // 初始化日志
  30. BuildLogger.InitLogger(buildParameters.EnableLog);
  31. // 执行构建流程
  32. var buildResult = BuildRunner.Run(buildPipeline, _buildContext);
  33. if (buildResult.Success)
  34. {
  35. buildResult.OutputPackageDirectory = buildParametersContext.GetPackageOutputDirectory();
  36. BuildLogger.Log($"{buildParameters.BuildMode} pipeline build succeed !");
  37. }
  38. else
  39. {
  40. BuildLogger.Warning($"{buildParameters.BuildMode} pipeline build failed !");
  41. BuildLogger.Error($"Build task failed : {buildResult.FailedTask}");
  42. BuildLogger.Error(buildResult.ErrorInfo);
  43. }
  44. return buildResult;
  45. }
  46. /// <summary>
  47. /// 构建资源包
  48. /// </summary>
  49. public BuildResult Run(BuildParameters buildParameters)
  50. {
  51. var buildPipeline = GetDefaultBuildPipeline(buildParameters.BuildPipeline);
  52. return Run(buildParameters, buildPipeline);
  53. }
  54. /// <summary>
  55. /// 获取默认的构建流程
  56. /// </summary>
  57. private List<IBuildTask> GetDefaultBuildPipeline(EBuildPipeline buildPipeline)
  58. {
  59. // 获取任务节点的属性集合
  60. if (buildPipeline == EBuildPipeline.BuiltinBuildPipeline)
  61. {
  62. List<IBuildTask> pipeline = new List<IBuildTask>
  63. {
  64. new TaskPrepare(), //前期准备工作
  65. new TaskGetBuildMap(), //获取构建列表
  66. new TaskBuilding(), //开始执行构建
  67. new TaskCopyRawFile(), //拷贝原生文件
  68. new TaskVerifyBuildResult(), //验证构建结果
  69. new TaskEncryption(), //加密资源文件
  70. new TaskUpdateBundleInfo(), //更新资源包信息
  71. new TaskCreateManifest(), //创建清单文件
  72. new TaskCreateReport(), //创建报告文件
  73. new TaskCreatePackage(), //制作包裹
  74. new TaskCopyBuildinFiles(), //拷贝内置文件
  75. };
  76. return pipeline;
  77. }
  78. else if (buildPipeline == EBuildPipeline.ScriptableBuildPipeline)
  79. {
  80. List<IBuildTask> pipeline = new List<IBuildTask>
  81. {
  82. new TaskPrepare(), //前期准备工作
  83. new TaskGetBuildMap(), //获取构建列表
  84. new TaskBuilding_SBP(), //开始执行构建
  85. new TaskCopyRawFile(), //拷贝原生文件
  86. new TaskVerifyBuildResult_SBP(), //验证构建结果
  87. new TaskEncryption(), //加密资源文件
  88. new TaskUpdateBundleInfo(), //更新补丁信息
  89. new TaskCreateManifest(), //创建清单文件
  90. new TaskCreateReport(), //创建报告文件
  91. new TaskCreatePackage(), //制作补丁包
  92. new TaskCopyBuildinFiles(), //拷贝内置文件
  93. };
  94. return pipeline;
  95. }
  96. else
  97. {
  98. throw new NotImplementedException();
  99. }
  100. }
  101. }
  102. }