ダイアログボックスを使用したい(2つのオプションがあります)。
UnityEditorを試しましたが、プロジェクトをビルドしてexeファイルを作成すると、UnityEditor参照を持つスクリプトが編集モードで動作しているため、動作しませんでした。インターネットで何時間も検索した後、2つの提案がありました(どちらも機能しませんでした)。
最初のもの:コードの前に#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
また、「UnityEditor;を使用して」を追加し、前述のプリプロセッサコマンドでカプセル化してみました。それも役に立たない。
UnityEditorを実行モードで使用する方法やダイアログボックスを別の方法で作成する方法を知っている人はいますか?
私が正しく理解していれば、キャラクターが死んだとき(またはプレイヤーが失敗したとき)にポップアップウィンドウが必要です。 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メソッドを呼び出してダイアログを開くことができます。
nity 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
}
}
または、カメラの中央にテクスチャ平面を表示することもできます。