BuildHelper.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System.IO;
  2. using UnityEditor;
  3. namespace ET
  4. {
  5. public static class BuildHelper
  6. {
  7. private const string relativeDirPrefix = "../Release";
  8. public static string BuildFolder = "../Release/{0}/StreamingAssets/";
  9. [MenuItem("Tools/web资源服务器")]
  10. public static void OpenFileServer()
  11. {
  12. ProcessHelper.Run("dotnet", "FileServer.dll", "../FileServer/");
  13. }
  14. public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool isBuildExe, bool isContainAB, bool clearFolder)
  15. {
  16. BuildTarget buildTarget = BuildTarget.StandaloneWindows;
  17. string exeName = "ET";
  18. switch (type)
  19. {
  20. case PlatformType.PC:
  21. buildTarget = BuildTarget.StandaloneWindows64;
  22. exeName += ".exe";
  23. break;
  24. case PlatformType.Android:
  25. buildTarget = BuildTarget.Android;
  26. exeName += ".apk";
  27. break;
  28. case PlatformType.IOS:
  29. buildTarget = BuildTarget.iOS;
  30. break;
  31. case PlatformType.MacOS:
  32. buildTarget = BuildTarget.StandaloneOSX;
  33. break;
  34. }
  35. string fold = string.Format(BuildFolder, type);
  36. if (clearFolder && Directory.Exists(fold))
  37. {
  38. Directory.Delete(fold, true);
  39. Directory.CreateDirectory(fold);
  40. }
  41. else
  42. {
  43. Directory.CreateDirectory(fold);
  44. }
  45. Log.Info("开始资源打包");
  46. BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
  47. GenerateVersionInfo(fold);
  48. Log.Info("完成资源打包");
  49. if (isContainAB)
  50. {
  51. FileHelper.CleanDirectory("Assets/StreamingAssets/");
  52. FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
  53. }
  54. if (isBuildExe)
  55. {
  56. AssetDatabase.Refresh();
  57. string[] levels = {
  58. "Assets/Scenes/Init.unity",
  59. };
  60. Log.Info("开始EXE打包");
  61. BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  62. Log.Info("完成exe打包");
  63. }
  64. }
  65. private static void GenerateVersionInfo(string dir)
  66. {
  67. VersionConfig versionProto = new VersionConfig();
  68. GenerateVersionProto(dir, versionProto, "");
  69. using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
  70. {
  71. byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
  72. fileStream.Write(bytes, 0, bytes.Length);
  73. }
  74. }
  75. private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
  76. {
  77. foreach (string file in Directory.GetFiles(dir))
  78. {
  79. string md5 = MD5Helper.FileMD5(file);
  80. FileInfo fi = new FileInfo(file);
  81. long size = fi.Length;
  82. string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
  83. versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
  84. {
  85. File = filePath,
  86. MD5 = md5,
  87. Size = size,
  88. });
  89. }
  90. foreach (string directory in Directory.GetDirectories(dir))
  91. {
  92. DirectoryInfo dinfo = new DirectoryInfo(directory);
  93. string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
  94. GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
  95. }
  96. }
  97. }
  98. }