Version: 2017.1
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, string text);
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, Texture image);
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, GUIContent content);
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, string text, GUIStyle style);
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, Texture image, GUIStyle style);
public static Rect Window (int id, Rect clientRect, GUI.WindowFunction func, GUIContent title, GUIStyle style);

パラメーター

Style ウィンドウに使用するスタイル。省略された場合は、現在の GUISkin にある toggle スタイルを使用します
id ウィンドウの ID 番号(ただし値はユニークでなければいけません)
clientRect ウィンドウの位置とサイズを示すスクリーン上の Rect
func ウィンドウのコンテンツを表示するメソッド
text ウィンドウ内で描画するテキスト
image ウィンドウ内で描画する画像
content ウィンドウ内で描画する GUIContent
style ウィンドウのスタイル
title ウィンドウのタイトルバーに表示されるテキスト

戻り値

Rect ウィンドウの位置とサイズを示すスクリーン上の Rect

説明

ポップアップウィンドウ

Windows float above normal GUI controls, feature click-to-focus and can optionally be dragged around by the end user. Unlike other controls, you need to pass them a separate function that renders the GUI controls inside the window.

注意: ウィンドウ内で GUILayout を使用する場合は GUILayout.Window を使用する必要があります。また、MonoBehaviour.useGUILayout が false に設定されている場合では、GUI.Window 内の GUI コントロールが GUILayout でなくても表示されません。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Rect windowRect = new Rect(20, 20, 120, 50); void OnGUI() { windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window"); } void DoMyWindow(int windowID) { if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World")) print("Got a click"); } }

同じ関数を使用して複数のウィンドウを作成することができます。ただし、ウィンドウごとにユニークな ID を持つ ことを確認してください。例:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Rect windowRect0 = new Rect(20, 20, 120, 50); public Rect windowRect1 = new Rect(20, 100, 120, 50); void OnGUI() { windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, "My Window"); windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, "My Window"); } void DoMyWindow(int windowID) { if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World")) print("Got a click in window " + windowID); GUI.DragWindow(new Rect(0, 0, 10000, 10000)); } }

ウィンドウの表示をやめるには、OnGUI メソッド内で GUI.Window の呼び出しを止めるだけです:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public bool doWindow0 = true; void DoWindow0(int windowID) { GUI.Button(new Rect(10, 30, 80, 20), "Click Me!"); } void OnGUI() { doWindow0 = GUI.Toggle(new Rect(10, 10, 100, 20), doWindow0, "Window 0"); if (doWindow0) GUI.Window(0, new Rect(110, 10, 200, 60), DoWindow0, "Basic Window"); } }

To make a window that gets its size from automatic GUI layouting, use GUILayout.Window. Call Ordering Windows need to be drawn back-to-front; windows on top of other windows need to be drawn later than the ones below them. This means that you can not count on your DoWindow functions to be called in any particular order. In order for this to work seamlessly, the following values are stored when you create your window (using the Window function), and retrieved when your DoWindow gets called: GUI.skin, GUI.enabled, GUI.color, GUI.backgroundColor, GUI.contentColor, GUI.matrix.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Rect windowRect0 = new Rect(20, 20, 120, 50); public Rect windowRect1 = new Rect(20, 100, 120, 50); void OnGUI() { GUI.color = Color.red; windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, "Red Window"); GUI.color = Color.green; windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, "Green Window"); } void DoMyWindow(int windowID) { if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World")) print("Got a click in window with color " + GUI.color); GUI.DragWindow(new Rect(0, 0, 10000, 10000)); } }

ウィンドウの内側と外側をフェードする GUI.color のアルファ成分を使用できることに注意してください。

See Also: DragWindow, BringWindowToFront, BringWindowToBack.