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();
    }

相关推荐
死也不注释8 小时前
【Unity UGUI 交互组件——Scrollbar(8)】
unity·游戏引擎·交互
九章云极AladdinEdu17 小时前
绿色算力技术栈:AI集群功耗建模与动态调频系统
人工智能·pytorch·深度学习·unity·游戏引擎·transformer·gpu算力
Lecxcy_Kastreain19 小时前
解决VSCode默认F5配置无法启动调试器的问题
ide·vscode·编辑器
伽蓝_游戏1 天前
UGUI源码剖析(15):Slider的运行时逻辑与编辑器实现
游戏·ui·unity·性能优化·c#·游戏引擎·.net
一骑红尘荔枝来1 天前
转载:VSCODE 关闭文件和资源管理器关联
ide·vscode·编辑器
2501_915918411 天前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
lrh30251 天前
Custom SRP - Complex Maps
unity·srp·render pipeline
乐吾乐科技1 天前
乐吾乐大屏可视化组态软件【SQL数据源】
物联网·信息可视化·编辑器·数据可视化·大屏端
m0_497214151 天前
unity中通过拖拽,自定义scroll view中子物体顺序
unity·游戏引擎
地狱为王2 天前
在Unity中实现DTLN-AEC处理音频文件的功能
unity·aec·降噪