Unity 扩展自定义编辑器窗口

在Assets文件夹路径下任意位置创建Editor文件夹,将扩展编辑器的代码放在Editor文件夹下


生成编辑器窗口

代码中首先引用命名空间

cs 复制代码
using UnityEditor;

然后将创建的类继承自EditorWindow

cs 复制代码
public class MenuEditor : EditorWindow

然后通过扩展编辑器菜单功能调用创建窗口的方法

cs 复制代码
[MenuItem("MainMenu/ShowWindows")]
static void ShowWindow()
{
    GetWindow<MenuEditor>();
}

要注意方法中泛型参数需要传入的是自己代码的类,这个功能是根据后面OnGUI方法中的具体逻辑生成一个窗口,如果没有OnGUI函数或者OnGUI函数是空,只会打开一个空白窗口。


OnGUI函数编辑窗口内容

全部的编辑窗口的内容全部都需要写在OnGUI事件函数中,生成窗口时会根据OnGUI函数中的具体逻辑来生成窗口中的内容,以下全部内容均需要卸载OnGUI函数中

cs 复制代码
public void OnGUI(){ }

GUILayoutOption 窗体大小参数

编辑窗口内容的时候大部分都会遇到一个params GUILayoutOption[] options的参数,这个参数中需要传入的GUILayoutOption类型,通常情况为

cs 复制代码
GUILayout.Width(100), GUILayout.Height(100)

也就是设置窗体的长度与高度,Width为长度,Height为高度


EditorGUILayout类

BeginFoldoutHeaderGroup创建折叠标签页

public static bool BeginFoldoutHeaderGroup(bool foldout, string content)

第一个参数时默认状态下标签页是否折叠

第二个参数为标签页的名字

返回的参数是标签页的折叠状态

需要特别注意的有两点:

1.需要在标签页中显示的内容需要用if语句判断返回值,然后将标签页中的内容写在if语句中。

2.想要结束标签页时需要调用EditorGUILayout.EndFoldoutHeaderGroup()方法

示例代码:

cs 复制代码
    bool showGroup;
    public void OnGUI()
    {
        showGroup = EditorGUILayout.BeginFoldoutHeaderGroup(showGroup,"ShowGroup");
        if (showGroup)
        {
            GUILayout.Label("YourShowGroupNow");
        }
        EditorGUILayout.EndFoldoutHeaderGroup();
    }

BeginScrollView创建滚动视图

public static Vector2 BeginScrollView(Vector2 scrollPosition, params GUILayoutOption[] options);

第一个参数传入任意Vector2的值,传入的值必须是函数返回的值

第二个参数为GUILayoutOption类型,根据参数传入设置窗口大小

返回值必须要与参数一传入的变量相同,否则无法实现滚动,代码中不需要使用返回值

需要特别注意的有两点:

1.方法的第一个参数和返回值必须是同一个全局变量,不能是常量,不能是局部变量

2.想要结束滚动视图时需要调用EditorGUILayout.EndScrollView()方法

示例代码:

cs 复制代码
    Vector2 scrollViewPos;
    public void OnGUI()
    {
        scrollViewPos = EditorGUILayout.BeginScrollView(scrollViewPos, GUILayout.Width(500),GUILayout.Height(100));
        GUILayout.Label("This is a ScrollView !\nThis is a ScrollView !\nThis is a ScrollView !\nThis is a ScrollView !");
        GUILayout.Label("This is a ScrollView !\nThis is a ScrollView !\nThis is a ScrollView !\nThis is a ScrollView !");
        EditorGUILayout.EndScrollView();
    }

BeginToggleGroup创建可勾选激活区域

public static bool BeginToggleGroup(string label, bool toggle);

第一个参数为勾选框中的文字

第二个参数为勾选框的初始勾选状态

返回值为当前勾选框是否被勾选

需要特别注意两点

1.通过勾选框判断是否需要激活的内容需要用if语句判断返回的bool值,然后将可激活内容写在if语句中。

2.想结束区域时需要调用EditorGUILayout.EndFoldoutHeaderGroup()方法

示例代码:

cs 复制代码
    bool showGroup;
    public void OnGUI()
    {
        showGroup = EditorGUILayout.BeginFoldoutHeaderGroup(showGroup, "ShowGroup");
        if (showGroup)
        {
            GUILayout.Label("YourShowGroupNow");
        }
        EditorGUILayout.EndFoldoutHeaderGroup();
    }

相关推荐
浅陌sss1 小时前
Unity中 Xlua使用整理(一)
unity·游戏引擎
W Y3 小时前
【Unity-和WPF结合的优势】
unity·游戏引擎·wpf
野区捕龙为宠3 小时前
Photon最新版本PUN 2.29 PREE,在无网的局域网下,无法连接自己搭建的本地服务器
unity·unity3d
一棵开花的树,枝芽无限靠近你3 小时前
【PPTist】插入形状、插入图片、插入图表
前端·笔记·学习·编辑器·ppt·pptist
omegayy7 小时前
.NET framework、Core和Standard都是什么?
unity·c#·.net
莲动渔舟9 小时前
国产编辑器EverEdit - 使用扩展脚本把文字按列对齐以便于阅读
编辑器·notepad++·emeditor·everedit
龚子亦9 小时前
Unity使用Vuforia插件进行AR开发
unity·游戏引擎·ar
monstercl11 小时前
Typora快捷键修改教程
编辑器·typora·md文本·快捷键修改
PassionY11 小时前
Unity-Mirror网络框架-从入门到精通之AdditiveScenes 示例
unity·unet·photon·networkmanager·mirror·多人联网·ngo
Heyqings12 小时前
使用Deepseek搭建类Cursor编辑器
人工智能·编辑器