BuildHelper.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System.IO;
  2. using ETModel;
  3. using UnityEditor;
  4. namespace ETEditor
  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.Close();
  29. Log.Info(info);
  30. }
  31. [MenuItem("Tools/web资源服务器")]
  32. public static void OpenFileServer()
  33. {
  34. string currentDir = System.Environment.CurrentDirectory;
  35. string path = Path.Combine(currentDir, @"..\FileServer\");
  36. System.Diagnostics.Process process = new System.Diagnostics.Process();
  37. process.StartInfo.FileName = "FileServer.exe";
  38. process.StartInfo.WorkingDirectory = path;
  39. process.StartInfo.CreateNoWindow = true;
  40. process.Start();
  41. }
  42. public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool isBuildExe, bool isContainAB)
  43. {
  44. BuildTarget buildTarget = BuildTarget.StandaloneWindows;
  45. string exeName = "ET";
  46. switch (type)
  47. {
  48. case PlatformType.PC:
  49. buildTarget = BuildTarget.StandaloneWindows;
  50. exeName += ".exe";
  51. break;
  52. case PlatformType.Android:
  53. buildTarget = BuildTarget.Android;
  54. exeName += ".apk";
  55. break;
  56. case PlatformType.IOS:
  57. buildTarget = BuildTarget.iOS;
  58. break;
  59. }
  60. string fold = string.Format(BuildFolder, type);
  61. if (!Directory.Exists(fold))
  62. {
  63. Directory.CreateDirectory(fold);
  64. }
  65. Log.Info("开始资源打包");
  66. BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
  67. GenerateVersionInfo(fold);
  68. Log.Info("完成资源打包");
  69. if (isContainAB)
  70. {
  71. FileHelper.CleanDirectory("Assets/StreamingAssets/");
  72. FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
  73. }
  74. if (isBuildExe)
  75. {
  76. AssetDatabase.Refresh();
  77. string[] levels = {
  78. "Assets/Scenes/Init.unity",
  79. };
  80. Log.Info("开始EXE打包");
  81. BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  82. Log.Info("完成exe打包");
  83. }
  84. }
  85. private static void GenerateVersionInfo(string dir)
  86. {
  87. VersionConfig versionProto = new VersionConfig();
  88. GenerateVersionProto(dir, versionProto, "");
  89. using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
  90. {
  91. byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
  92. fileStream.Write(bytes, 0, bytes.Length);
  93. }
  94. }
  95. private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
  96. {
  97. foreach (string file in Directory.GetFiles(dir))
  98. {
  99. if (file.EndsWith(".manifest"))
  100. {
  101. continue;
  102. }
  103. string md5 = MD5Helper.FileMD5(file);
  104. FileInfo fi = new FileInfo(file);
  105. long size = fi.Length;
  106. string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
  107. versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
  108. {
  109. File = filePath,
  110. MD5 = md5,
  111. Size = size,
  112. });
  113. }
  114. foreach (string directory in Directory.GetDirectories(dir))
  115. {
  116. DirectoryInfo dinfo = new DirectoryInfo(directory);
  117. string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
  118. GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
  119. }
  120. }
  121. }
  122. }