Unity—EditorApplication类监听编辑器的状态(播放,暂停,编辑)
最近在捣鼓着自己做个网游,在编辑器模式下退出游戏,再次进入才会监听上一个socket已经掉线了(没有到心跳时间),然后把上一个socket从连接池里清理刷新腾位置。这样就需要在编辑器模式下停止播放状态的时候给服务器发送一个断开链接的信息,让服务器及时监听到退出,如果打包出来了用下面这些方法应该都可以监听或者实现退出游戏。
void Te() { Application.Quit(); Application.quitting += Application_quitting; Application.wantsToQuit += Application_wantsToQuit; } private bool Application_wantsToQuit() { return true; } private void Application_quitting() { }
Application.wantsToQuit += Application_wantsToQuit;这个方法我是参考与推出编辑器的一个案例(我找到过几个都是差不多的代码,所以这里就不引入链接了)得出的应该是可以的,我会在平时需要打包的时候进行测试。
[InitializeOnLoadMethod] static void InitializeOnLoadMethod() { EditorApplication.wantsToQuit -= Quit; EditorApplication.wantsToQuit += Quit; } static bool Quit() { EditorUtility.DisplayDialog("不允许关闭unity", "不可以关闭unity", "哈哈"); return false; //return true表示可以关闭unity编辑器 }
要用的时候复制代码就好,不要改动,Quit方法得是静态的,非静态不起作用,我手贱改过一次。然后我觉得既然退出编辑器都可以监听,我就去EditorApplication这个类里查看里面的属性,和方法,终于在经过一段时间的尝试被我找到了。
void Start() { EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; } private void EditorApplication_playModeStateChanged(PlayModeStateChange obj) { switch (obj) { case PlayModeStateChange.EnteredEditMode://停止播放事件监听后被监听 Debug.Log("如果编辑器应用程序处于编辑模式而之前处于播放模式,则在编辑器应用程序的下一次更新期间发生。"); break; case PlayModeStateChange.ExitingEditMode://编辑转播放时监听(播放之前) Debug.Log("在退出编辑模式时,在编辑器处于播放模式之前发生。"); break; case PlayModeStateChange.EnteredPlayMode://播放时立即监听 Debug.Log("如果编辑器应用程序处于播放模式而之前处于编辑模式,则在编辑器应用程序的下一次更新期间发生。"); break; case PlayModeStateChange.ExitingPlayMode://停止播放立即监听 Debug.Log("在退出播放模式时,在编辑器处于编辑模式之前发生。"); break; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!