BuildHelper.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. System.Diagnostics.Process process = new System.Diagnostics.Process();
  36. process.StartInfo.FileName = "dotnet";
  37. process.StartInfo.Arguments = "FileServer.dll";
  38. process.StartInfo.WorkingDirectory = "../FileServer/";
  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.StandaloneWindows64;
  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. case PlatformType.MacOS:
  60. buildTarget = BuildTarget.StandaloneOSX;
  61. break;
  62. }
  63. string fold = string.Format(BuildFolder, type);
  64. if (!Directory.Exists(fold))
  65. {
  66. Directory.CreateDirectory(fold);
  67. }
  68. Log.Info("开始资源打包");
  69. BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
  70. GenerateVersionInfo(fold);
  71. Log.Info("完成资源打包");
  72. if (isContainAB)
  73. {
  74. FileHelper.CleanDirectory("Assets/StreamingAssets/");
  75. FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
  76. }
  77. if (isBuildExe)
  78. {
  79. AssetDatabase.Refresh();
  80. string[] levels = {
  81. "Assets/Scenes/Init.unity",
  82. };
  83. Log.Info("开始EXE打包");
  84. BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  85. Log.Info("完成exe打包");
  86. }
  87. }
  88. private static void GenerateVersionInfo(string dir)
  89. {
  90. VersionConfig versionProto = new VersionConfig();
  91. GenerateVersionProto(dir, versionProto, "");
  92. using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
  93. {
  94. byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
  95. fileStream.Write(bytes, 0, bytes.Length);
  96. }
  97. }
  98. private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
  99. {
  100. foreach (string file in Directory.GetFiles(dir))
  101. {
  102. string md5 = MD5Helper.FileMD5(file);
  103. FileInfo fi = new FileInfo(file);
  104. long size = fi.Length;
  105. string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
  106. versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
  107. {
  108. File = filePath,
  109. MD5 = md5,
  110. Size = size,
  111. });
  112. }
  113. foreach (string directory in Directory.GetDirectories(dir))
  114. {
  115. DirectoryInfo dinfo = new DirectoryInfo(directory);
  116. string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
  117. GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
  118. }
  119. }
  120. }
  121. }