在Assets文件夹路径下任意位置创建Editor文件夹,将扩展编辑器的代码放在Editor文件夹下
生成编辑器窗口
代码中首先引用命名空间
using UnityEditor;
然后将创建的类继承自EditorWindow
public class MenuEditor : EditorWindow
然后通过扩展编辑器菜单功能调用创建窗口的方法
[MenuItem("MainMenu/ShowWindows")]
static void ShowWindow()
{GetWindow<MenuEditor>();
}
要注意方法中泛型参数需要传入的是自己代码的类,这个功能是根据后面OnGUI方法中的具体逻辑生成一个窗口,如果没有OnGUI函数或者OnGUI函数是空,只会打开一个空白窗口。
OnGUI函数编辑窗口内容
全部的编辑窗口的内容全部都需要写在OnGUI事件函数中,生成窗口时会根据OnGUI函数中的具体逻辑来生成窗口中的内容,以下全部内容均需要卸载OnGUI函数中
public void OnGUI(){ }
GUILayoutOption 窗体大小参数
编辑窗口内容的时候大部分都会遇到一个params GUILayoutOption[] options的参数,这个参数中需要传入的GUILayoutOption类型,通常情况为
GUILayout.Width(100), GUILayout.Height(100)
也就是设置窗体的长度与高度,Width为长度,Height为高度
EditorGUILayout类
BeginFoldoutHeaderGroup创建折叠标签页
public static bool BeginFoldoutHeaderGroup(bool foldout, string content)
第一个参数时默认状态下标签页是否折叠
第二个参数为标签页的名字
返回的参数是标签页的折叠状态
需要特别注意的有两点:
1.需要在标签页中显示的内容需要用if语句判断返回值,然后将标签页中的内容写在if语句中。
2.想要结束标签页时需要调用EditorGUILayout.EndFoldoutHeaderGroup()方法
示例代码:
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()方法
示例代码:
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()方法
示例代码:
bool showGroup;public void OnGUI(){showGroup = EditorGUILayout.BeginFoldoutHeaderGroup(showGroup, "ShowGroup");if (showGroup){GUILayout.Label("YourShowGroupNow");}EditorGUILayout.EndFoldoutHeaderGroup();}