2013-08-25 33 views
7

我想使用對話框(有兩個選項)。如何在Unity中創建對話框(不使用UnityEditor)?

我試過UnityEditor,但是當我構建項目來創建一個exe文件時,它不起作用,因爲具有UnityEditor引用的腳本只是在編輯模式下工作。在互聯網上搜索了幾個小時之後,有兩條建議(兩條都不起作用)。

第一個:在代碼之前使用#if UNITY_EDITOR並以#endif結束。在這種情況下,它的構建沒有錯誤,但我的遊戲中根本沒有對話框。

第二個:將腳本置於Assets/Editor目錄下。在這種情況下,我無法將腳本添加到我的遊戲對象中。也許,在Editor目錄下創建一個新腳本並粘貼UnityEditor中使用的行將會起作用,但我無法弄清楚如何做到這一點。

我使用:

#if UNITY_EDITOR 
if (UnityEditor.EditorUtility.DisplayDialog("Game Over", "Again?", "Restart", "Exit")) 
      { 
       Application.LoadLevel (0); 
      } 
      else 
      { 
       Application.Quit(); 
      } 
#endif 

我還試圖加入「使用UnityEditor;」,並與我所提到的預處理器命令包封它。這也是無用的。

有沒有人知道如何在運行模式下使用UnityEditor或者如何以不同的方式創建對話框?

+0

Unity的內置GUI系統還沒有對話框。如果你搜索Unity論壇,我肯定有人[做了一個腳本](http://forum.unity3d.com/threads/122455-MessageBox)(鏈接是用於消息框但概念相似)。 – Jerdak

回答

1

看看Unity GUI Scripting Guide

例子:

using UnityEngine; 
using System.Collections; 

public class GUITest : MonoBehaviour { 

    private Rect windowRect = new Rect (20, 20, 120, 50); 

    void OnGUI() { 
     windowRect = GUI.Window (0, windowRect, WindowFunction, "My Window"); 
    } 

    void WindowFunction (int windowID) { 
     // Draw any Controls inside the window here 
    } 

} 

另外,您可以在相機的中心展現出紋理面。

5

如果我理解正確,當角色死亡(或玩家失敗)時,您需要一個彈出窗口。 UnityEditor類用於擴展編輯器,但在你的情況下,你需要一個遊戲解決方案。這可以通過gui窗口來實現。

這是在c#中的一個簡短的腳本實現這一點。

using UnityEngine; 
using System.Collections; 

public class GameMenu : MonoBehaviour 
{ 
    // 200x300 px window will apear in the center of the screen. 
    private Rect windowRect = new Rect ((Screen.width - 200)/2, (Screen.height - 300)/2, 200, 300); 
    // Only show it if needed. 
    private bool show = false; 

    void OnGUI() 
    { 
     if(show) 
      windowRect = GUI.Window (0, windowRect, DialogWindow, "Game Over"); 
    } 

    // This is the actual window. 
    void DialogWindow (int windowID) 
    { 
     float y = 20; 
     GUI.Label(new Rect(5,y, windowRect.width, 20), "Again?"); 

     if(GUI.Button(new Rect(5,y, windowRect.width - 10, 20), "Restart")) 
     { 
      Application.LoadLevel (0); 
      show = false; 
     } 

     if(GUI.Button(new Rect(5,y, windowRect.width - 10, 20), "Exit")) 
     { 
      Application.Quit(); 
      show = false; 
     } 
    } 

    // To open the dialogue from outside of the script. 
    public void Open() 
    { 
     show = true; 
    } 
} 

您可以將此類添加到任何遊戲對象,並調用其打開方法打開對話框。

+2

您是否嘗試運行代碼? GUI元素將相互重疊,因爲它們的'y'值是相同的。 – Raptor