Unity Editor 编辑器拓展 01——创建一个独立的编辑器窗口

1.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//窗口类需要继承自EditorWindow
public class MyWindow : EditorWindow
{
    //窗口需要一个打开的方式
    //MenuItem属性会在编辑器菜单上创建对应的选项
    //点击选项即可创建窗口
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //调用EditorWindow的静态函数GetWindow
        //创建对应的窗口
        //ps:该函数有多个重载
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    private void OnGUI()
    {
        //窗口绘制的实际代码在这里
    }
}

因为OnGUI中没有写代码,所以是一个空的窗口

Unity Editor 编辑器拓展 01——创建一个独立的编辑器窗口_第1张图片

 

2.

OnGUI()中可以使用UnityGUIGUIGUILayout类,还可以使用编辑器组件EditorGUI 和 EditorGUILayout 类。

现在添加如下内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//窗口类需要继承自EditorWindow
public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;

    //窗口需要一个打开的方式
    //MenuItem属性会在编辑器菜单上创建对应的选项
    //点击选项即可创建窗口
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //调用EditorWindow的静态函数GetWindow
        //创建对应的窗口
        //ps:该函数有多个重载
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    private void OnGUI()
    {
        //窗口绘制的实际代码在这里
        GUILayout.Label("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField("TextField", myString);
        groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
        myBool = EditorGUILayout.Toggle("Toggle", myBool);
        myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup();
    }
}

会创建如下的窗口

Unity Editor 编辑器拓展 01——创建一个独立的编辑器窗口_第2张图片

 

涉及到EditorWindow,EditorStyle,EditorGUILayout,GUILayout等类、GenericMenu 通用菜单

 

EditorWindow

静态变量

focusedWindow 当前已获得键盘焦点的 EditorWindow。(只读)
mouseOverWindow 当前在鼠标光标下的 EditorWindow。(只读)

变量

autoRepaintOnSceneChange 窗口是否会在场景每次发生变化时自动重绘?
maximized 此窗口是否已最大化?
maxSize 此窗口的最大大小。
minSize 此窗口的最小大小。
position 窗口在屏幕空间中的理想位置。
titleContent 用于绘制 EditorWindow 标题的 GUIContent。
wantsMouseEnterLeaveWindow 检查是否已在此编辑器窗口的 GUI 中收到 MouseEnterWindow 和 MouseLeaveWindow 事件。
wantsMouseMove 检查是否已在此编辑器窗口的 GUI 中收到 MouseMove 事件。

公共函数

BeginWindows 标记所有弹出窗口的开始区域。
Close 关闭编辑器窗口。
EndWindows 关闭由 EditorWindow.BeginWindows 开始的窗口组。
Focus 将键盘焦点移动到另一个 EditorWindow。
RemoveNotification 停止显示通知消息。
Repaint 重绘窗口。
SendEvent 将事件发送到窗口。
Show 显示 EditorWindow 窗口。
ShowAsDropDown 显示包含下拉菜单和样式的窗口。
ShowAuxWindow 在辅助窗口中显示编辑器窗口。
ShowNotification 显示通知消息。
ShowPopup 使用弹出式框架显示编辑器窗口。
ShowUtility 将 EditorWindow 显示为浮动实用程序窗口。

静态函数

FocusWindowIfItsOpen 聚焦发现的第一个指定类型的 EditorWindow(如果已打开)。
GetWindow 返回当前屏幕上第一个 t 类型的 EditorWindow。
GetWindowWithRect 返回当前屏幕上第一个 t 类型的 EditorWindow。

消息

Awake 在新窗口打开时调用。
OnDestroy 调用 OnDestroy 以关闭 EditorWindow 窗口。
OnFocus 在窗口获得键盘焦点时调用。
OnGUI 在此处实现您自己的 Editor GUI。
OnHierarchyChange 处理程序,用于在层级视图中的对象或对象组发生更改时发送的消息。
OnInspectorUpdate OnInspectorUpdate 以每秒 10 帧的速度调用,以便检视面板有机会进行更新。
OnLostFocus 在窗口失去键盘焦点时调用。
OnProjectChange 处理程序,用于在项目状态发生更改时发送的消息。
OnSelectionChange 每当选择发生更改时调用。
Update 在所有可见窗口上每秒调用多次。

继承的成员

变量

hideFlags 该对象应该隐藏、随场景一起保存还是由用户修改?
name 对象的名称。

公共函数

GetInstanceID 返回对象的实例 ID。
ToString 返回 GameObject 的名称。

静态函数

Destroy 删除 GameObject、组件或资源。
DestroyImmediate 立即销毁对象 /obj/。强烈建议您改用 Destroy。
DontDestroyOnLoad 在加载新的 Scene 时,请勿销毁 Object。
FindObjectOfType 返回第一个类型为 type 的已加载的激活对象。
FindObjectsOfType 返回所有类型为 type 的已加载的激活对象的列表。
Instantiate 克隆 original 对象并返回克隆对象。
CreateInstance 创建脚本化对象的实例。

运算符

bool 该对象是否存在?
operator != 比较两个对象是否引用不同的对象。
operator == 比较两个对象引用,判断它们是否引用同一个对象。

消息

Awake 当 ScriptableObject 脚本启动时调用此函数。
OnDisable 当脚本化对象超出范围时调用此函数。
OnEnable 当对象加载时调用此函数。

你可能感兴趣的:(Unity,Unity,Editor,Unity,编辑器拓展)