using System.IO; using UnityEditor; using UnityEngine; namespace ET { public static class AssemblyEditor { [InitializeOnLoadMethod] static void Initialize() { EditorApplication.playModeStateChanged += change => { switch (change) { case PlayModeStateChange.ExitingEditMode: { OnExitingEditMode(); break; } case PlayModeStateChange.ExitingPlayMode: { OnExitingPlayMode(); break; } } }; } /// /// 退出编辑模式时处理(即将进入运行模式) /// EnableDll模式时, 屏蔽掉Library的dll(通过改文件后缀方式屏蔽), 仅使用Define.CodeDir下的dll /// static void OnExitingEditMode() { GlobalConfig globalConfig = Resources.Load("GlobalConfig"); if (!globalConfig.EnableDll) { return; } foreach (string dll in AssemblyTool.DllNames) { string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll"; if (File.Exists(dllFile)) { string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE"; if (File.Exists(dllDisableFile)) { File.Delete(dllDisableFile); } File.Move(dllFile, dllDisableFile); } string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb"; if (File.Exists(pdbFile)) { string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE"; if (File.Exists(pdbDisableFile)) { File.Delete(pdbDisableFile); } File.Move(pdbFile, pdbDisableFile); } } } /// /// 退出运行模式时处理(即将进入编辑模式) /// 还原Library里面屏蔽掉的dll(HybridCLR或者非EnableDll模式都会用到这个目录下的dll, 故需要还原) /// static void OnExitingPlayMode() { foreach (string dll in AssemblyTool.DllNames) { string dllDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll.DISABLE"; if (File.Exists(dllDisableFile)) { string dllFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.dll"; if (File.Exists(dllFile)) { File.Delete(dllDisableFile); } else { File.Move(dllDisableFile, dllFile); } } string pdbDisableFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb.DISABLE"; if (File.Exists(pdbDisableFile)) { string pdbFile = $"{Application.dataPath}/../Library/ScriptAssemblies/{dll}.pdb"; if (File.Exists(pdbFile)) { File.Delete(pdbDisableFile); } else { File.Move(pdbDisableFile, pdbFile); } } } } } }