| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System.IO;
- using Model;
- using UnityEditor;
- namespace MyEditor
- {
- public static class BuildHelper
- {
- private const string relativeDirPrefix = "../Release";
- public static string BuildFolder = "../Release/{0}/StreamingAssets/";
-
- [MenuItem("Tools/编译Hotfix")]
- public static void BuildHotfix()
- {
- System.Diagnostics.Process process = new System.Diagnostics.Process();
- string unityDir = System.Environment.GetEnvironmentVariable("Unity");
- if (string.IsNullOrEmpty(unityDir))
- {
- Log.Error("没有设置Unity环境变量!");
- return;
- }
- process.StartInfo.FileName = $@"{unityDir}\Editor\Data\MonoBleedingEdge\bin\mono.exe";
- process.StartInfo.Arguments = $@"{unityDir}\Editor\Data\MonoBleedingEdge\lib\mono\xbuild\14.0\bin\xbuild.exe .\Hotfix\Unity.Hotfix.csproj";
- process.StartInfo.UseShellExecute = false;
- process.StartInfo.WorkingDirectory = @".\";
- process.StartInfo.RedirectStandardOutput = true;
- process.StartInfo.RedirectStandardError = true;
- process.Start();
- string info = process.StandardOutput.ReadToEnd();
- process.WaitForExit();
- process.Close();
- Log.Info(info);
- }
- [MenuItem("Tools/Web资源服务器")]
- public static void OpenFileServer()
- {
- string currentDir = System.Environment.CurrentDirectory;
- string path = Path.Combine(currentDir, @"..\FileServer\");
- System.Diagnostics.Process process = new System.Diagnostics.Process();
- process.StartInfo.FileName = "FileServer.exe";
- process.StartInfo.WorkingDirectory = path;
- process.StartInfo.CreateNoWindow = true;
- process.Start();
- }
- public static void Build(PlatformType type, BuildOptions options, bool isBuildExe)
- {
- BuildTarget buildTarget = BuildTarget.StandaloneWindows;
- string exeName = "ET";
- switch (type)
- {
- case PlatformType.PC:
- buildTarget = BuildTarget.StandaloneWindows;
- exeName += ".exe";
- break;
- case PlatformType.Android:
- buildTarget = BuildTarget.Android;
- exeName += ".apk";
- break;
- case PlatformType.IOS:
- buildTarget = BuildTarget.iOS;
- break;
- }
- string fold = string.Format(BuildFolder, type);
- if (!Directory.Exists(fold))
- {
- Directory.CreateDirectory(fold);
- }
-
- Log.Info("开始资源打包");
- BuildPipeline.BuildAssetBundles(fold, BuildAssetBundleOptions.None, buildTarget);
- GenerateVersionInfo(fold);
- Log.Info("完成资源打包");
-
- if (isBuildExe)
- {
- string[] levels = {
- "Assets/Scenes/Init.unity",
- };
- Log.Info("开始EXE打包");
- BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, options);
- Log.Info("完成exe打包");
- }
- }
- private static void GenerateVersionInfo(string dir)
- {
- VersionConfig versionProto = new VersionConfig();
- GenerateVersionProto(dir, versionProto, "");
- using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
- {
- byte[] bytes = MongoHelper.ToJson(versionProto).ToByteArray();
- fileStream.Write(bytes, 0, bytes.Length);
- }
- }
- private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
- {
- foreach (string file in Directory.GetFiles(dir))
- {
- if (file.EndsWith(".manifest"))
- {
- continue;
- }
- string md5 = MD5Helper.FileMD5(file);
- FileInfo fi = new FileInfo(file);
- long size = fi.Length;
- string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
- versionProto.FileVersionInfos.Add(new FileVersionInfo
- {
- File = filePath,
- MD5 = md5,
- Size = size,
- });
- }
- foreach (string directory in Directory.GetDirectories(dir))
- {
- DirectoryInfo dinfo = new DirectoryInfo(directory);
- string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
- GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
- }
- }
- }
- }
|