BuildHelper.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System.IO;
  2. using ETModel;
  3. using UnityEditor;
  4. namespace MyEditor
  5. {
  6. public static class BuildHelper
  7. {
  8. private const string relativeDirPrefix = "../Release";
  9. public static string BuildFolder = "../Release/{0}/StreamingAssets/";
  10. //[MenuItem("Tools/编译Hotfix")]
  11. public static void BuildHotfix()
  12. {
  13. System.Diagnostics.Process process = new System.Diagnostics.Process();
  14. string unityDir = System.Environment.GetEnvironmentVariable("Unity");
  15. if (string.IsNullOrEmpty(unityDir))
  16. {
  17. Log.Error("没有设置Unity环境变量!");
  18. return;
  19. }
  20. process.StartInfo.FileName = $@"{unityDir}\Editor\Data\MonoBleedingEdge\bin\mono.exe";
  21. process.StartInfo.Arguments = $@"{unityDir}\Editor\Data\MonoBleedingEdge\lib\mono\xbuild\14.0\bin\xbuild.exe .\Hotfix\Unity.Hotfix.csproj";
  22. process.StartInfo.UseShellExecute = false;
  23. process.StartInfo.WorkingDirectory = @".\";
  24. process.StartInfo.RedirectStandardOutput = true;
  25. process.StartInfo.RedirectStandardError = true;
  26. process.Start();
  27. string info = process.StandardOutput.ReadToEnd();
  28. process.WaitForExit();
  29. process.Close();
  30. Log.Info(info);
  31. }
  32. [MenuItem("Tools/Web资源服务器")]
  33. public static void OpenFileServer()
  34. {
  35. string currentDir = System.Environment.CurrentDirectory;
  36. string path = Path.Combine(currentDir, @"..\FileServer\");
  37. System.Diagnostics.Process process = new System.Diagnostics.Process();
  38. process.StartInfo.FileName = "FileServer.exe";
  39. process.StartInfo.WorkingDirectory = path;
  40. process.StartInfo.CreateNoWindow = true;
  41. process.Start();
  42. }
  43. public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool isBuildExe)
  44. {
  45. BuildTarget buildTarget = BuildTarget.StandaloneWindows;
  46. string exeName = "ET";
  47. switch (type)
  48. {
  49. case PlatformType.PC:
  50. buildTarget = BuildTarget.StandaloneWindows;
  51. exeName += ".exe";
  52. break;
  53. case PlatformType.Android:
  54. buildTarget = BuildTarget.Android;
  55. exeName += ".apk";
  56. break;
  57. case PlatformType.IOS:
  58. buildTarget = BuildTarget.iOS;
  59. break;
  60. case PlatformType.WebGL:
  61. buildTarget = BuildTarget.WebGL;
  62. break;
  63. }
  64. string fold = string.Format(BuildFolder, type);
  65. if (!Directory.Exists(fold))
  66. {
  67. Directory.CreateDirectory(fold);
  68. }
  69. Log.Info("开始资源打包");
  70. BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
  71. GenerateVersionInfo(fold);
  72. Log.Info("完成资源打包");
  73. if (isBuildExe)
  74. {
  75. string[] levels = {
  76. "Assets/Scenes/Init.unity",
  77. };
  78. Log.Info("开始EXE打包");
  79. BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  80. Log.Info("完成exe打包");
  81. }
  82. }
  83. private static void GenerateVersionInfo(string dir)
  84. {
  85. VersionConfig versionProto = new VersionConfig();
  86. GenerateVersionProto(dir, versionProto, "");
  87. using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
  88. {
  89. byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
  90. fileStream.Write(bytes, 0, bytes.Length);
  91. }
  92. }
  93. private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
  94. {
  95. foreach (string file in Directory.GetFiles(dir))
  96. {
  97. if (file.EndsWith(".manifest"))
  98. {
  99. continue;
  100. }
  101. string md5 = MD5Helper.FileMD5(file);
  102. FileInfo fi = new FileInfo(file);
  103. long size = fi.Length;
  104. string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
  105. versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
  106. {
  107. File = filePath,
  108. MD5 = md5,
  109. Size = size,
  110. });
  111. }
  112. foreach (string directory in Directory.GetDirectories(dir))
  113. {
  114. DirectoryInfo dinfo = new DirectoryInfo(directory);
  115. string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
  116. GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
  117. }
  118. }
  119. }
  120. }