TaskCreatePackage.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace YooAsset.Editor
  5. {
  6. [TaskAttribute("制作包裹")]
  7. public class TaskCreatePackage : IBuildTask
  8. {
  9. void IBuildTask.Run(BuildContext context)
  10. {
  11. var buildParameters = context.GetContextObject<BuildParametersContext>();
  12. var buildMapContext = context.GetContextObject<BuildMapContext>();
  13. var buildMode = buildParameters.Parameters.BuildMode;
  14. if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
  15. {
  16. CopyPackageFiles(buildParameters, buildMapContext);
  17. }
  18. }
  19. /// <summary>
  20. /// 拷贝补丁文件到补丁包目录
  21. /// </summary>
  22. private void CopyPackageFiles(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext)
  23. {
  24. var buildParameters = buildParametersContext.Parameters;
  25. string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
  26. string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory();
  27. BuildLogger.Log($"开始拷贝补丁文件到补丁包目录:{packageOutputDirectory}");
  28. if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
  29. {
  30. // 拷贝构建日志
  31. {
  32. string sourcePath = $"{pipelineOutputDirectory}/buildlogtep.json";
  33. string destPath = $"{packageOutputDirectory}/buildlogtep.json";
  34. EditorTools.CopyFile(sourcePath, destPath, true);
  35. }
  36. // 拷贝代码防裁剪配置
  37. if (buildParameters.SBPParameters.WriteLinkXML)
  38. {
  39. string sourcePath = $"{pipelineOutputDirectory}/link.xml";
  40. string destPath = $"{packageOutputDirectory}/link.xml";
  41. EditorTools.CopyFile(sourcePath, destPath, true);
  42. }
  43. }
  44. else if (buildParameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline)
  45. {
  46. // 拷贝UnityManifest序列化文件
  47. {
  48. string sourcePath = $"{pipelineOutputDirectory}/{YooAssetSettings.OutputFolderName}";
  49. string destPath = $"{packageOutputDirectory}/{YooAssetSettings.OutputFolderName}";
  50. EditorTools.CopyFile(sourcePath, destPath, true);
  51. }
  52. // 拷贝UnityManifest文本文件
  53. {
  54. string sourcePath = $"{pipelineOutputDirectory}/{YooAssetSettings.OutputFolderName}.manifest";
  55. string destPath = $"{packageOutputDirectory}/{YooAssetSettings.OutputFolderName}.manifest";
  56. EditorTools.CopyFile(sourcePath, destPath, true);
  57. }
  58. }
  59. else
  60. {
  61. throw new System.NotImplementedException();
  62. }
  63. // 拷贝所有补丁文件
  64. int progressValue = 0;
  65. int fileTotalCount = buildMapContext.Collection.Count;
  66. foreach (var bundleInfo in buildMapContext.Collection)
  67. {
  68. //判断文件已存在不更新,因为文件名中有hash值,可以保证文件最新
  69. if(!File.Exists(bundleInfo.BundleInfo.PackageOutputFilePath))
  70. {
  71. EditorTools.CopyFile(bundleInfo.BundleInfo.BuildOutputFilePath, bundleInfo.BundleInfo.PackageOutputFilePath, true);
  72. EditorTools.DisplayProgressBar("拷贝补丁文件", ++progressValue, fileTotalCount);
  73. }
  74. }
  75. EditorTools.ClearProgressBar();
  76. }
  77. }
  78. }