11

我想使用对话框(有两个选项)。

我尝试了 UnityEditor,但是当我构建项目以创建 exe 文件时,它不起作用,因为具有 UnityEditor 引用的脚本只是在编辑模式下工作。在互联网上搜索了几个小时后,有两个建议(都没有工作)。

第一个#if UNITY_EDITOR在代码之前使用并以#endif. 在这种情况下,它的构建没有错误,但我的游戏中根本没有对话框。

第二个:将脚本放在 Assets/Editor 目录下。在这种情况下,我无法将脚本添加到我的游戏对象中。也许,在 Editor 目录下创建一个新脚本并在其中粘贴 UnityEditor used 行会起作用,但我不知道该怎么做。

我用了:

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

我还尝试添加“ using UnityEditor; ”并用我提到的预处理器命令封装它。它也是无用的。

有谁知道如何在运行模式下使用 UnityEditor 或如何以不同的方式创建对话框?

4

2 回答 2

9

如果我理解正确,当角色死亡(或玩家失败)时,您需要一个弹出窗口。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;
    }
}

您可以将此类添加到您的任何游戏对象中,并调用其 Open 方法来打开对话。

于 2014-08-22T08:45:33.040 回答
2

查看Unity GUI 脚本指南

例子:

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
    }

}

或者,您可以在相机的中心显示一个纹理平面。

于 2013-08-25T23:35:21.723 回答