标记所有弹出窗口的开始区域。
GUI.Window 在编辑器中的行为与在游戏中略有不同。在游戏中,GUI.Window 会在屏幕上弹出窗口。在编辑器中,GUI.Window 会在您的一个编辑器窗口内显示一个子窗口。Begin/EndWindows 用于确定这些窗口可以在哪里显示。您需要在 BeginWindows / EndWindows 对内包含对 GUI.Window 或 GUILayout.Window 的所有调用。例如:
一个简单的编辑器窗口,其中包含一个窗口和一个按钮。
此规则的一个例外是在 Editor.OnSceneGUI 中,窗口范围是隐式的。
using UnityEditor; using UnityEngine; using System.Collections; public class IMGUIWindowDemo : EditorWindow { // The position of the window public Rect windowRect = new Rect(100, 100, 200, 200); void OnGUI() { BeginWindows(); // All GUI.Window or GUILayout.Window must come inside here windowRect = GUILayout.Window(1, windowRect, DoWindow, "Hi There"); EndWindows(); } // The window function. This works just like ingame GUI.Window void DoWindow(int unusedWindowID) { GUILayout.Button("Hi"); GUI.DragWindow(); } // Add menu item to show this demo. [MenuItem("Test/GUIWindow Demo")] static void Init() { EditorWindow.GetWindow(typeof(IMGUIWindowDemo)); } }
BeginWindows / EndWindows 对的位置决定了弹出窗口将出现在哪里;所有窗口都将剪辑到由 GUI.BeginGroup 或 GUI.BeginScrollView 定义的剪辑区域。下面是一个简单的例子:
一个简单的编辑器窗口,其中包含一个窗口和一个按钮,并使用滚动条。
using UnityEditor; using UnityEngine; using System.Collections; public class IMGUIWindowDemo2 : EditorWindow { // The position of the window public Rect windowRect = new Rect(100, 100, 200, 200); // Scroll position public Vector2 scrollPos = Vector2.zero; void OnGUI() { // Set up a scroll view scrollPos = GUI.BeginScrollView(new Rect(0, 0, position.width, position.height), scrollPos, new Rect(0, 0, 1000, 1000)); // Same code as before - make a window. Only now, it's INSIDE the scrollview BeginWindows(); windowRect = GUILayout.Window(1, windowRect, DoWindow, "Hi There"); EndWindows(); // Close the scroll view GUI.EndScrollView(); } void DoWindow(int unusedWindowID) { GUILayout.Button("Hi"); GUI.DragWindow(); } [MenuItem("Test/GUIWindow Demo 2")] static void Init() { EditorWindow.GetWindow(typeof(IMGUIWindowDemo2)); } }