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);

Parameters

Style用于窗口的可选样式。如果省略,则使用当前 GUISkinwindow 样式。
id窗口的 ID 编号(只要保证唯一,可以使用任意值)。
clientRect表示窗口位置和大小的屏幕矩形。
func显示窗口内容的脚本函数。
text要在窗口内呈现的文本。
image要在窗口内呈现的图像。
content要在窗口内呈现的 GUIContent。
style窗口的样式信息。
title窗口标题栏中显示的文本。

Returns

Rect 表示窗口位置和大小的屏幕矩形。

Description

创建一个弹出窗口。

窗口浮动在普通 GUI 控件上方,可通过点击获得焦点,可以选择是否允许最终用户拖动。与其他控件不同,您需要为它们传递一个在窗口内呈现 GUI 控件的独立函数。

Note: If you are using GUILayout to place your components inside the window, you should use GUILayout.Window. Also, if MonoBehaviour.useGUILayout is set to false then a call to GUI.Window will not have any effect, even though it is not a GUILayout function.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Rect windowRect = new Rect(20, 20, 120, 50);

void OnGUI() { // Register the window. Notice the 3rd parameter windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window"); }

// Make the contents of the 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() { // Register the window. We create two windows that use the same function // Notice that their IDs differ windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, "My Window"); windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, "My Window"); }

// Make the contents of the window void DoMyWindow(int windowID) { if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World")) { print("Got a click in window " + windowID); }

// Make the windows be draggable. GUI.DragWindow(new Rect(0, 0, 10000, 10000)); } }

要停止显示窗口,只需在您的主 OnGUI 函数中停止调用 GUI.Window:

// boolean variable to decide whether to show the window or not.
// Change this from the in-game GUI, scripting, the inspector or anywhere else to
// decide whether the window is visible

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { public bool doWindow0 = true;

// Make the contents of the window. void DoWindow0(int windowID) { GUI.Button(new Rect(10, 30, 80, 20), "Click Me!"); }

void OnGUI() { // Make a toggle button for hiding and showing the window doWindow0 = GUI.Toggle(new Rect(10, 10, 100, 20), doWindow0, "Window 0");

// Make sure we only call GUI.Window if doWindow0 is true. 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() { // Here we make 2 windows. We set the GUI.color value to something before each. GUI.color = Color.red; windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, "Red Window");

GUI.color = Color.green; windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, "Green Window"); }

// Make the contents of the window. // The value of GUI.color is set to what it was when the window // was created in the code above. 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); }

// Make the windows be draggable. GUI.DragWindow(new Rect(0, 0, 10000, 10000)); } }

Note that you can use the alpha component of GUI.color to fade windows in and out.

另请参阅:DragWindowBringWindowToFrontBringWindowToBack