11

ダイアログ ボックスを使用したい (2 つのオプションがある)。

UnityEditor を試してみましたが、プロジェクトをビルドして exe ファイルを作成すると、UnityEditor 参照を含むスクリプトが編集モードで動作しているだけであるため、動作しませんでした。インターネットで何時間も検索した後、2 つの提案がありました (どちらも機能しませんでした)。

最初の 1 つ:#if UNITY_EDITORコードの前に使用し、で終了し#endifます。この場合、エラーなしでビルドされましたが、私のゲームにはダイアログ ボックスがまったくありませんでした。

2 つ目: スクリプトを Assets/Editor ディレクトリに配置します。この場合、スクリプトをゲーム オブジェクトに追加できませんでした。おそらく、Editor ディレクトリの下に新しいスクリプトを作成し、そこに UnityEditor の使用済み行を貼り付ければうまくいくかもしれませんが、これを行う方法がわかりませんでした。

私が使用した:

#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 に答える