TaskBuilding.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Linq;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using UnityEditor;
  6. using UnityEngine;
  7. namespace YooAsset.Editor
  8. {
  9. [TaskAttribute("资源构建内容打包")]
  10. public class TaskBuilding : IBuildTask
  11. {
  12. public class BuildResultContext : IContextObject
  13. {
  14. public AssetBundleManifest UnityManifest;
  15. }
  16. void IBuildTask.Run(BuildContext context)
  17. {
  18. var buildParametersContext = context.GetContextObject<BuildParametersContext>();
  19. var buildMapContext = context.GetContextObject<BuildMapContext>();
  20. // 模拟构建模式下跳过引擎构建
  21. var buildMode = buildParametersContext.Parameters.BuildMode;
  22. if (buildMode == EBuildMode.SimulateBuild)
  23. return;
  24. // 开始构建
  25. string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
  26. BuildAssetBundleOptions buildOptions = buildParametersContext.GetPipelineBuildOptions();
  27. AssetBundleManifest buildResults = BuildPipeline.BuildAssetBundles(pipelineOutputDirectory, buildMapContext.GetPipelineBuilds(), buildOptions, buildParametersContext.Parameters.BuildTarget);
  28. if (buildResults == null)
  29. {
  30. throw new Exception("构建过程中发生错误!");
  31. }
  32. if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
  33. {
  34. string unityOutputManifestFilePath = $"{pipelineOutputDirectory}/{YooAssetSettings.OutputFolderName}";
  35. if (System.IO.File.Exists(unityOutputManifestFilePath) == false)
  36. throw new Exception("构建过程中发生严重错误!请查阅上下文日志!");
  37. }
  38. BuildLogger.Log("Unity引擎打包成功!");
  39. BuildResultContext buildResultContext = new BuildResultContext();
  40. buildResultContext.UnityManifest = buildResults;
  41. context.SetContextObject(buildResultContext);
  42. }
  43. }
  44. }