样式 | 用于窗口的可选样式。如果省略,则使用当前 GUISkin 中的 window 样式。 |
id | 窗口的 ID 号(只要唯一,任何值都可以)。 |
clientRect | 表示窗口位置和大小的屏幕矩形。 |
func | 显示窗口内容的脚本函数。 |
text | 在窗口内渲染的文本。 |
image | 在窗口内渲染的图像。 |
content | 在窗口内渲染的 GUIContent。 |
style | 窗口的样式信息。 |
title | 显示在窗口标题栏中的文本。 |
Rect 表示窗口位置和大小的屏幕矩形。
创建一个弹出窗口。
窗口浮在普通 GUI 控件之上,具有点击聚焦功能,并且可以选择由最终用户拖动。与其他控件不同,您需要向其传递一个单独的函数来渲染窗口内的 GUI 控件。
注意:如果您使用 GUILayout 在窗口内放置组件,则应使用 GUILayout.Window。此外,如果 MonoBehaviour.useGUILayout 设置为 false,则即使它不是 GUILayout 函数,调用 GUI.Window 也不会产生任何效果。
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"); } } }
要创建大小来自自动 GUI 布局的窗口,请使用 GUILayout.Window。调用顺序窗口需要从后到前绘制;位于其他窗口顶部的窗口需要比位于其下方的窗口晚绘制。这意味着您不能指望以任何特定顺序调用您的 DoWindow 函数。为了使此功能无缝工作,在创建窗口(使用Window函数)时会存储以下值,并在调用您的 DoWindow 时检索: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)); } }
请注意,您可以使用 GUI.color 的 alpha 分量淡入淡出窗口。
其他资源:DragWindow、BringWindowToFront、BringWindowToBack。