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; } }

浙公网安备 33010602011771号