Version: 6000.3
语言: 中文
使用 IMGUI 扩展编辑器
将属性抽屉与 IMGUI 一起使用来自定义检查器

使用 IMGUI 创建自定义编辑器窗口

注意:强烈建议使用 UI 工具包来扩展 Unity 编辑器,因为它提供了比 IMGUI 更现代、更灵活、更可扩展的解决方案。

您可以在应用中创建任意数量的自定义窗口。这些行为就像检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
,场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
或任何其他内置的。这是将用户界面添加到游戏子系统的好方法。

Serious Games Interactive的自定义编辑器界面,用于编写过场动画动作脚本
Serious Games Interactive的自定义编辑器界面,用于编写过场动画动作脚本

制作自定义编辑器窗口涉及以下简单步骤:

  • 创建派生自 EditorWindow 的脚本。
  • 使用代码触发窗口自行显示。
  • 为您的工具实现 GUI 代码。

派生自EditorWindow(Derive From EditorWindow)

为了制作编辑器窗口,你的脚本必须存储在名为“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 - 放置在项目中名为“编辑器”的文件夹中。

显示窗口

为了在屏幕上显示窗口,请创建一个显示窗口的菜单项。这是通过创建一个由 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

实现窗口的 GUI

窗口的实际内容是通过实现 OnGUI 函数来呈现的。您可以使用用于游戏内 GUI 的相同 UnityGUI 类(GUIGUILayout)。此外,我们还提供了一些额外的 GUI 控件,位于仅编辑器类 EditorGUIEditorGUILayout 中。这些类添加到普通类中已有的控件中,因此您可以随意混合和匹配。

以下 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 页面上的示例和文档。

使用 IMGUI 扩展编辑器
将属性抽屉与 IMGUI 一起使用来自定义检查器