AssetBundleBuilderHelper.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using UnityEditor;
  6. namespace YooAsset.Editor
  7. {
  8. public static class AssetBundleBuilderHelper
  9. {
  10. /// <summary>
  11. /// 获取默认的输出根路录
  12. /// </summary>
  13. public static string GetDefaultOutputRoot()
  14. {
  15. string projectPath = EditorTools.GetProjectPath();
  16. return $"{projectPath}/Bundles";
  17. }
  18. /// <summary>
  19. /// 获取流文件夹路径
  20. /// </summary>
  21. public static string GetStreamingAssetsFolderPath()
  22. {
  23. return $"{Application.dataPath}/StreamingAssets/YooAssets/";
  24. }
  25. /// <summary>
  26. /// 获取构建管线的输出目录
  27. /// </summary>
  28. public static string MakePipelineOutputDirectory(string outputRoot, BuildTarget buildTarget)
  29. {
  30. return $"{outputRoot}/{buildTarget}/{YooAssetSettings.OutputFolderName}";
  31. }
  32. /// <summary>
  33. /// 清空流文件夹
  34. /// </summary>
  35. public static void ClearStreamingAssetsFolder()
  36. {
  37. string streamingFolderPath = GetStreamingAssetsFolderPath();
  38. EditorTools.ClearFolder(streamingFolderPath);
  39. }
  40. /// <summary>
  41. /// 删除流文件夹内无关的文件
  42. /// 删除.manifest文件和.meta文件
  43. /// </summary>
  44. public static void DeleteStreamingAssetsIgnoreFiles()
  45. {
  46. string streamingFolderPath = GetStreamingAssetsFolderPath();
  47. if (Directory.Exists(streamingFolderPath))
  48. {
  49. string[] files = Directory.GetFiles(streamingFolderPath, "*.manifest", SearchOption.AllDirectories);
  50. foreach (var file in files)
  51. {
  52. FileInfo info = new FileInfo(file);
  53. info.Delete();
  54. }
  55. files = Directory.GetFiles(streamingFolderPath, "*.meta", SearchOption.AllDirectories);
  56. foreach (var item in files)
  57. {
  58. FileInfo info = new FileInfo(item);
  59. info.Delete();
  60. }
  61. }
  62. }
  63. /// <summary>
  64. /// 获取所有补丁包版本列表
  65. /// 注意:列表会按照版本号从小到大排序
  66. /// </summary>
  67. private static List<int> GetPackageVersionList(BuildTarget buildTarget, string outputRoot)
  68. {
  69. List<int> versionList = new List<int>();
  70. string parentPath = $"{outputRoot}/{buildTarget}";
  71. if (Directory.Exists(parentPath) == false)
  72. return versionList;
  73. // 获取所有补丁包文件夹
  74. string[] allFolders = Directory.GetDirectories(parentPath);
  75. for (int i = 0; i < allFolders.Length; i++)
  76. {
  77. string folderName = Path.GetFileNameWithoutExtension(allFolders[i]);
  78. if (int.TryParse(folderName, out int version))
  79. versionList.Add(version);
  80. }
  81. // 从小到大排序
  82. versionList.Sort();
  83. return versionList;
  84. }
  85. /// <summary>
  86. /// 获取当前最大的补丁包版本号
  87. /// </summary>
  88. /// <returns>如果没有任何补丁版本,那么返回-1</returns>
  89. public static int GetMaxPackageVersion(BuildTarget buildTarget, string outputRoot)
  90. {
  91. List<int> versionList = GetPackageVersionList(buildTarget, outputRoot);
  92. if (versionList.Count == 0)
  93. return -1;
  94. return versionList[versionList.Count - 1];
  95. }
  96. /// <summary>
  97. /// 是否存在任何补丁包版本
  98. /// </summary>
  99. public static bool HasAnyPackageVersion(BuildTarget buildTarget, string outputRoot)
  100. {
  101. List<int> versionList = GetPackageVersionList(buildTarget, outputRoot);
  102. return versionList.Count > 0;
  103. }
  104. /// <summary>
  105. /// 加载补丁清单文件
  106. /// </summary>
  107. internal static PatchManifest LoadPatchManifestFile(string fileDirectory, int resourceVersion)
  108. {
  109. string filePath = $"{fileDirectory}/{YooAssetSettingsData.GetPatchManifestFileName(resourceVersion)}";
  110. if (File.Exists(filePath) == false)
  111. {
  112. throw new System.Exception($"Not found patch manifest file : {filePath}");
  113. }
  114. string jsonData = FileUtility.ReadFile(filePath);
  115. return PatchManifest.Deserialize(jsonData);
  116. }
  117. /// <summary>
  118. /// 获取旧的补丁清单
  119. /// </summary>
  120. internal static PatchManifest GetOldPatchManifest(string pipelineOutputDirectory)
  121. {
  122. string staticVersionFilePath = $"{pipelineOutputDirectory}/{YooAssetSettings.VersionFileName}";
  123. string staticVersionContent = FileUtility.ReadFile(staticVersionFilePath);
  124. int staticVersion = int.Parse(staticVersionContent);
  125. return LoadPatchManifestFile(pipelineOutputDirectory, staticVersion);
  126. }
  127. }
  128. }