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

相关推荐
AllBlue3 小时前
unity调用安卓方法
android·unity·游戏引擎
金融小师妹4 小时前
基于LSTM趋势预测的白银价格突破58美元阈值,年度累计涨幅超100%的强化学习驱动分析
大数据·人工智能·编辑器·1024程序员节
郝学胜-神的一滴4 小时前
Horse3D游戏引擎研发笔记(十):在QtOpenGL环境下,视图矩阵与投影矩阵(摄像机)带你正式进入三维世界
c++·3d·unity·游戏引擎·godot·图形渲染·unreal engine
AllBlue6 小时前
unity导出成安卓工程,集成到安卓显示
android·unity·游戏引擎
Sator19 小时前
Unity的FishNet相关知识
网络·unity·游戏引擎
AllBlue9 小时前
安卓调用unity中的方法
android·unity·游戏引擎
Xiaok101810 小时前
VSCode 报错 “No module named ‘torch‘“
ide·vscode·编辑器
大江东去浪淘尽千古风流人物11 小时前
【MSCKF】StateHelper 学习备注
vscode·学习·性能优化·编辑器·dsp开发
李岱诚11 小时前
epic商城下载,ue4报错处理
游戏引擎·ue4
亮子AI11 小时前
【Tiptap】怎样输入/粘贴 Markdown 到编辑器里?
编辑器·tiptap