Version: 2017.2
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 @param Style Дополнительный стиль для использования окна. Если отсутствует, используется стиль из текущего GUISkin.
id @param id Идентификатор окна (может быть любым значением, но только уникальным).
clientRect @return Прямоугольник на экране, обозначающий позицию и размер окна.
func @param func Функция в скрипте для отображения содержимого окна.
text @param text Текст для отображения в окне.
image @param image Изображение для отображения в окне.
content @param content GUI контент для отображения в окне.
style @param style Стиль информации для окна.
title @param title Текст, отображающийся в области названия окна.

Returns

Rect @return Прямоугольник на экране, обозначающий позицию и размер окна.

Description

Вызывает всплывающее окно.

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 не приведет к какому либо результату (несмотря на то, что это не функция 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)); } }

Чтобы остановить отображение окна, просто остановите вызов GUI.Window внутри вашей главной функции OnGUI:

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.