注意:强烈建议使用 UI 工具包 扩展 Unity 编辑器,因为它提供了比 IMGUI 更现代、灵活且可扩展的解决方案。
您可以在应用程序中创建任意数量的自定义窗口。这些窗口的行为与 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
请参阅 术语表、场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是设计和构建游戏。 更多信息
请参阅 术语表 或任何其他内置窗口相同。这是为游戏子系统添加用户界面的好方法。
创建自定义编辑器窗口涉及以下简单步骤
为了制作您的编辑器窗口,您的脚本必须存储在名为“Editor”的文件夹中。在此脚本中创建一个从 EditorWindow 派生的类。然后在内部 OnGUI 函数中编写您的 GUI 控件。
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// The actual window code goes here
}
}
MyWindow.cs - 位于项目中名为“Editor”的文件夹中。
为了在屏幕上显示窗口,创建一个菜单项来显示它。这是通过创建一个由 MenuItem 属性激活的函数来完成的。
Unity 中的默认行为是回收窗口,因此再次选择菜单项将显示现有窗口。这是通过使用 EditorWindow.GetWindow 函数完成的。例如:
using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")]
public static void ShowWindow () {
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI () {
// The actual window code goes here
}
}
显示 MyWindow
这将创建一个标准的可停靠编辑器窗口,该窗口会保存其调用之间的位置,可以用于自定义布局等。要更多地控制创建的内容,您可以使用 GetWindowWithRect
窗口的实际内容是通过实现 OnGUI 函数来呈现的。您可以使用与游戏内 GUI 相同的 UnityGUI 类(GUI 和 GUILayout)。此外,我们提供了一些额外的 GUI 控件,位于仅限编辑器的类 EditorGUI 和 EditorGUILayout 中。这些类会添加到普通类中已经可用的控件中,因此您可以随意混合和匹配。
以下 C# 代码显示了如何将 GUI 元素添加到自定义 EditorWindow
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;
// Add menu item named "My Window" to the Window menu
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
//Show existing window instance. If one doesn't exist, make one.
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI()
{
GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
myString = EditorGUILayout.TextField ("Text Field", myString);
groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
myBool = EditorGUILayout.Toggle ("Toggle", myBool);
myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
EditorGUILayout.EndToggleGroup ();
}
}
此示例将生成一个看起来像这样的窗口
有关更多信息,请查看 EditorWindow 页面 上的示例和文档。