BuildHelper.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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)
  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 (!Directory.Exists(fold))
  37. {
  38. Directory.CreateDirectory(fold);
  39. }
  40. Log.Info("开始资源打包");
  41. BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
  42. GenerateVersionInfo(fold);
  43. Log.Info("完成资源打包");
  44. if (isContainAB)
  45. {
  46. FileHelper.CleanDirectory("Assets/StreamingAssets/");
  47. FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
  48. }
  49. if (isBuildExe)
  50. {
  51. AssetDatabase.Refresh();
  52. string[] levels = {
  53. "Assets/Scenes/Init.unity",
  54. };
  55. Log.Info("开始EXE打包");
  56. BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  57. Log.Info("完成exe打包");
  58. }
  59. }
  60. private static void GenerateVersionInfo(string dir)
  61. {
  62. VersionConfig versionProto = new VersionConfig();
  63. GenerateVersionProto(dir, versionProto, "");
  64. using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
  65. {
  66. byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
  67. fileStream.Write(bytes, 0, bytes.Length);
  68. }
  69. }
  70. private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
  71. {
  72. foreach (string file in Directory.GetFiles(dir))
  73. {
  74. string md5 = MD5Helper.FileMD5(file);
  75. FileInfo fi = new FileInfo(file);
  76. long size = fi.Length;
  77. string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
  78. versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
  79. {
  80. File = filePath,
  81. MD5 = md5,
  82. Size = size,
  83. });
  84. }
  85. foreach (string directory in Directory.GetDirectories(dir))
  86. {
  87. DirectoryInfo dinfo = new DirectoryInfo(directory);
  88. string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
  89. GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
  90. }
  91. }
  92. }
  93. }