AssemblyTool.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System.IO;
  2. using UnityEditor;
  3. using UnityEditor.Build.Player;
  4. using UnityEngine;
  5. namespace ET
  6. {
  7. public class AssemblyTool
  8. {
  9. public static readonly string[] dllNames = new[] { "Unity.Hotfix", "Unity.HotfixView", "Unity.Model", "Unity.ModelView" };
  10. private static BuildTarget GetBuildTarget(PlatformType type)
  11. {
  12. switch (type)
  13. {
  14. case PlatformType.Windows:
  15. return BuildTarget.StandaloneWindows64;
  16. case PlatformType.Android:
  17. return BuildTarget.Android;
  18. case PlatformType.IOS:
  19. return BuildTarget.iOS;
  20. case PlatformType.MacOS:
  21. return BuildTarget.StandaloneOSX;
  22. case PlatformType.Linux:
  23. return BuildTarget.StandaloneLinux64;
  24. }
  25. return BuildTarget.StandaloneWindows;
  26. }
  27. public static void DoCompile()
  28. {
  29. BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  30. ScriptCompilationOptions options = EditorUserBuildSettings.development
  31. ? ScriptCompilationOptions.DevelopmentBuild
  32. : ScriptCompilationOptions.None;
  33. CompileDlls(target, options);
  34. CopyHotUpdateDlls();
  35. }
  36. public static void CompileDlls(PlatformType platform, ScriptCompilationOptions options = ScriptCompilationOptions.None)
  37. {
  38. CompileDlls(GetBuildTarget(platform), options);
  39. }
  40. public static void CompileDlls(BuildTarget target, ScriptCompilationOptions options = ScriptCompilationOptions.None)
  41. {
  42. Directory.CreateDirectory(Define.BuildOutputDir);
  43. BuildTargetGroup group = BuildPipeline.GetBuildTargetGroup(target);
  44. ScriptCompilationSettings scriptCompilationSettings = new ScriptCompilationSettings();
  45. scriptCompilationSettings.group = group;
  46. scriptCompilationSettings.target = target;
  47. scriptCompilationSettings.extraScriptingDefines = new[] { "UNITY_COMPILE" };
  48. scriptCompilationSettings.options = options;
  49. PlayerBuildInterface.CompilePlayerScripts(scriptCompilationSettings, Define.BuildOutputDir);
  50. #if UNITY_2022
  51. EditorUtility.ClearProgressBar();
  52. #endif
  53. Debug.Log("compile finish!!!");
  54. }
  55. static void CopyHotUpdateDlls()
  56. {
  57. FileHelper.CleanDirectory(Define.CodeDir);
  58. foreach (var dllName in dllNames)
  59. {
  60. string sourceDll = $"{Define.BuildOutputDir}/{dllName}.dll";
  61. string sourcePdb = $"{Define.BuildOutputDir}/{dllName}.pdb";
  62. File.Copy(sourceDll, $"{Define.CodeDir}/{dllName}.dll.bytes", true);
  63. File.Copy(sourcePdb, $"{Define.CodeDir}/{dllName}.pdb.bytes", true);
  64. Debug.Log($"copy:{Define.BuildOutputDir}/{dllName} => {Define.CodeDir}/{dllName}");
  65. }
  66. Debug.Log("copy finish!!!");
  67. }
  68. public static void Enable_UNITY_CLIENT()
  69. {
  70. DisableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
  71. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
  72. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
  73. DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
  74. EnableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
  75. DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
  76. EnableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
  77. DisableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
  78. DisableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
  79. AssetDatabase.Refresh();
  80. }
  81. public static void Enable_UNITY_SERVER()
  82. {
  83. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
  84. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
  85. DisableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
  86. DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
  87. DisableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
  88. DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
  89. DisableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
  90. EnableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
  91. EnableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
  92. AssetDatabase.Refresh();
  93. }
  94. public static void Enable_UNITY_CLIENTSERVER()
  95. {
  96. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Client/Ignore.asmdef");
  97. EnableAsmdef("Assets/Scripts/Codes/Model/Generate/Server/Ignore.asmdef");
  98. DisableAsmdef("Assets/Scripts/Codes/Model/Generate/ClientServer/Ignore.asmdef");
  99. DisableAsmdef("Assets/Scripts/Codes/Model/Client/Ignore.asmdef");
  100. DisableAsmdef("Assets/Scripts/Codes/Model/Server/Ignore.asmdef");
  101. DisableAsmdef("Assets/Scripts/Codes/Hotfix/Client/Ignore.asmdef");
  102. DisableAsmdef("Assets/Scripts/Codes/Hotfix/Server/Ignore.asmdef");
  103. DisableAsmdef("Assets/Scripts/Codes/HotfixView/Client/Ignore.asmdef");
  104. DisableAsmdef("Assets/Scripts/Codes/ModelView/Client/Ignore.asmdef");
  105. AssetDatabase.Refresh();
  106. }
  107. static void EnableAsmdef(string asmdefFile)
  108. {
  109. string asmdefDisableFile = $"{asmdefFile}.DISABLED";
  110. if (File.Exists(asmdefDisableFile))
  111. {
  112. File.Move(asmdefDisableFile, asmdefFile);
  113. File.Delete(asmdefDisableFile);
  114. File.Delete($"{asmdefDisableFile}.meta");
  115. }
  116. }
  117. static void DisableAsmdef(string asmdefFile)
  118. {
  119. if (File.Exists(asmdefFile))
  120. {
  121. string asmdefDisableFile = $"{asmdefFile}.DISABLED";
  122. File.Move(asmdefFile, asmdefDisableFile);
  123. File.Delete(asmdefFile);
  124. File.Delete($"{asmdefFile}.meta");
  125. }
  126. }
  127. }
  128. }