TaskBuilding_SBP.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Linq;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using UnityEditor.Build.Pipeline;
  6. using UnityEditor.Build.Pipeline.Interfaces;
  7. using UnityEditor.Build.Pipeline.Tasks;
  8. namespace YooAsset.Editor
  9. {
  10. [TaskAttribute("资源构建内容打包")]
  11. public class TaskBuilding_SBP : IBuildTask
  12. {
  13. public class BuildResultContext : IContextObject
  14. {
  15. public IBundleBuildResults Results;
  16. }
  17. void IBuildTask.Run(BuildContext context)
  18. {
  19. var buildParametersContext = context.GetContextObject<BuildParametersContext>();
  20. var buildMapContext = context.GetContextObject<BuildMapContext>();
  21. // 模拟构建模式下跳过引擎构建
  22. var buildMode = buildParametersContext.Parameters.BuildMode;
  23. if (buildMode == EBuildMode.SimulateBuild)
  24. return;
  25. // 构建内容
  26. var buildContent = new BundleBuildContent(buildMapContext.GetPipelineBuilds());
  27. // 开始构建
  28. IBundleBuildResults buildResults;
  29. var buildParameters = buildParametersContext.GetSBPBuildParameters();
  30. var taskList = SBPBuildTasks.Create(buildMapContext.Command.ShadersBundleName);
  31. ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out buildResults, taskList);
  32. if (exitCode < 0)
  33. {
  34. throw new Exception($"构建过程中发生错误 : {exitCode}");
  35. }
  36. // 创建着色器信息
  37. // 说明:解决因为着色器资源包导致验证失败。
  38. // 例如:当项目里没有着色器,如果有依赖内置着色器就会验证失败。
  39. string shadersBundleName = buildMapContext.Command.ShadersBundleName;
  40. if (buildResults.BundleInfos.ContainsKey(shadersBundleName))
  41. {
  42. buildMapContext.CreateShadersBundleInfo(shadersBundleName);
  43. }
  44. BuildLogger.Log("Unity引擎打包成功!");
  45. BuildResultContext buildResultContext = new BuildResultContext();
  46. buildResultContext.Results = buildResults;
  47. context.SetContextObject(buildResultContext);
  48. }
  49. }
  50. }