版本: Unity 6 (6000.0)
语言英语
  • C#

GUI.Window

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

样式 用于窗口的可选样式。如果省略,则使用当前 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.skinGUI.enabledGUI.colorGUI.backgroundColorGUI.contentColorGUI.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 分量淡入淡出窗口。

其他资源:DragWindowBringWindowToFrontBringWindowToBack