2016-09-23 50 views
-1

我使用統一5.4.1f1個人在Windows 10 64位即使在獨立模式下,仍然無法使退出鍵退出遊戲。我如何解決它?

我會解釋我所做的所有步驟和我迄今嘗試的所有事情。

冷杉時間我創建了一個新的C#文件與原始代碼: 現在,當我按下Escape鍵它將回到編輯器,但不會退出遊戲!使用[InitializeOnLoad]時無法停止編輯器播放按鈕並退出遊戲。要退出遊戲,只能使用Build and Run in Standalone模式執行此操作,然後您可以創建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>構建&來看,我會得到兩個錯誤:

Errors

第一個錯誤是:

資產/ 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 

和腳本文件不是在編輯器中的目錄! 這一次當我做構建&運行我得到一個新的另一個錯誤:

資產/ MyScripts/FullScreenPlayMode.cs(34,16):錯誤CS0246:類型或命名空間名稱'EditorWindow」找不到。你是否缺少using指令或程序集引用?

找不到EditorWindow出現這個錯誤。這個錯誤發生在我使用#if和#endif時

所以在我嘗試到目前爲止的所有方式中,我遇到了另一個問題。

回答

2

我可能會簡化你的問題,但你可以簡單地這樣做:

void Update() 
{ 
    if (Input.GetKey(KeyCode.Escape)) 
    { 
#if UNITY_EDITOR 
     if (EditorApplication.isPlaying) 
     { 
      EditorApplication.isPlaying = false; 
     } 

#else 
     Application.Quit(); 
#endif 
     } 
相關問題