如何在独立模式或编辑器模式下退出

Posted

技术标签:

【中文标题】如何在独立模式或编辑器模式下退出【英文标题】:How do I quit in standalone or in editor mode 【发布时间】:2017-02-01 20:07:28 【问题描述】:

我在 windows 10 64bit 上使用 unity 5.4.1f1 Personal

我将解释到目前为止我所做的所有步骤以及我尝试过的所有事情。

我第一次使用原始代码创建了一个新的 c# 文件: 现在,当我按下 Escape 键时,它会返回编辑器,但不会退出游戏!使用 [InitializeOnLoad] 时无法停止编辑器播放按钮并退出游戏。要退出游戏,您只能在独立模式下使用 Build And Run 来完成,然后您可以制作 Application.Quit();

using UnityEditor;
using UnityEngine;
using System.Collections;

[InitializeOnLoad]
public class FullscreenPlayMode : MonoBehaviour 

    //The size of the toolbar above the game view, excluding the OS border.
    private static int tabHeight = 22;

    static FullscreenPlayMode()
    
        EditorApplication.playmodeStateChanged -= CheckPlayModeState;
        EditorApplication.playmodeStateChanged += CheckPlayModeState;

        EditorApplication.update += Update;

    

    static void CheckPlayModeState()
    
        if (EditorApplication.isPlaying)
        
            FullScreenGameWindow();
        
        else 
        
            CloseGameWindow();
        
    

    static EditorWindow GetMainGameView()
        EditorApplication.ExecuteMenuItem("Window/Game");

        System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");
        System.Reflection.MethodInfo GetMainGameView = T.GetMethod("GetMainGameView",System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
        System.Object Res = GetMainGameView.Invoke(null,null);
        return (EditorWindow)Res;
    

    static void FullScreenGameWindow()

        EditorWindow gameView = GetMainGameView();

        Rect newPos = new Rect(0, 0 - tabHeight, Screen.currentResolution.width, Screen.currentResolution.height + tabHeight);

        gameView.position = newPos;
        gameView.minSize = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height + tabHeight);
        gameView.maxSize = gameView.minSize;
        gameView.position = newPos; 

    

    static void CloseGameWindow()
        EditorWindow gameView = GetMainGameView();
        gameView.Close();
    

    static void Update()
    
        if (Input.GetKey (KeyCode.Escape)) 
        
            CloseGameWindow ();
        
    

然后,由于这没有按我的意愿工作,所以我尝试了其他方法。 我删除了以下行:[InitializeOnLoad],但没有更改脚本其余部分的任何其他内容。

这次在删除 [InitializeOnLoad] 行后,我将脚本拖到 ThirdPersonController 中。

现在,如果我像以前一样从编辑器开始游戏并按下退出键,它将返回编辑器但不会退出游戏!

但是现在如果我在菜单 File > Build & Run 中进行 make 我会得到两个错误:

第一个错误是:

Assets/MyScripts/FullScreenPlayMode.cs(1,7):错误 CS0246:找不到类型或命名空间名称“UnityEditor”。您是否缺少 using 指令或程序集引用?

第二个错误:

构建播放器时出错,因为脚本存在编译器错误

所以我去了这个解决方案,在这个链接中应该是一个解决方案:

Not working solution

如果我将文件脚本移动到 EDITOR 目录,那么我无法将脚本拖到 ThirdPersonController 它会抛出一条消息说脚本是编辑器脚本。

如果我尝试了链接中的第二种解决方案:

#if UNITY_EDITOR
     // Editor specific code here
 #endif

所以我在顶部的脚本中做到了:

#if UNITY_EDITOR
using UnityEditor;
#endif

并且脚本文件不在编辑器目录中! 这一次,当我进行 Build & Run 时,我又遇到了一个新错误:

Assets/MyScripts/FullScreenPlayMode.cs(34,16):错误 CS0246:找不到类型或命名空间名称“EditorWindow”。您是否缺少 using 指令或程序集引用?

无法使用 EditorWindow 找到此错误。当我使用 #if 和 #endif 时发生此错误

所以到目前为止我尝试过的所有方法都遇到了另一个问题。

【问题讨论】:

【参考方案1】:

我可能会简化您的问题,但您可以这样做:

void Update()

    if (Input.GetKey(KeyCode.Escape))
    
 #if UNITY_EDITOR
        if (EditorApplication.isPlaying)
        
            EditorApplication.isPlaying = false;
        

#else 
        Application.Quit();
#endif
        

【讨论】:

以上是关于如何在独立模式或编辑器模式下退出的主要内容,如果未能解决你的问题,请参考以下文章

Linux如何在vi模式下保存未命名的文件

linux vi保存退出命令 (如何退出vi)

LINUX中,Vi编辑器的几种模式及保存、退出等命令。

GitKraken - 如何退出全屏模式?

Ubuntu下如何统计代码行数

excel如何退出编辑状态