注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
文章目录
前言
EditorGUI是一个主要用于绘制编辑器拓展 UI 的工具类,主要是绘制编辑器功能中会用到的一些特殊UI控件。EditorGUILayout是一个带有自动布局功能的 EditorGUI 绘制工具类。
官方文档:EditorGUILayout官方文档
常用的EditorGUILayout控件
我就不一一介绍了,直接放出最终例子,大家对照着效果查看就行了。
using UnityEditor;
using UnityEngine;
public class EditorGUIWindow : EditorWindow
{
int layer;
string tag;
Color color;
public enum E_TestType
{
One = 1,
Two = 2,
Three = 4,
One_and_Two = 1 | 2,
}
E_TestType type;
E_TestType mul_type;
string[] strs = { "选择123", "选择234", "选择345" };
int[] ints = { 123, 234, 345 };
int num = 0;
GameObject gameObj;
int i;
int i2;
float f;
double d;
long l;
string str;
Vector2 vec2;
Vector3 vec3;
Vector4 vec4;
Rect rect;
Bounds bounds;
BoundsInt boundsInt;
bool isHide;
bool isHideGroup;
bool isTog;
bool isTogLeft;
bool isTogGroup;
bool isTog1;
bool isTog2;
float fSlider;
int iSlider;
float leftV;
float rightV;
AnimationCurve curve = new AnimationCurve();
Vector2 vec2Pos;
[MenuItem("编辑器拓展/自定义窗口拓展/EditorGUI绘制自定义窗口")]
private static void OpenEditorGUIWindow()
{
EditorGUIWindow win = EditorWindow.GetWindow<EditorGUIWindow>("EditorGUI知识讲解窗口");
win.Show();
}
private void OnGUI()
{
// 文本控件
EditorGUILayout.LabelField("文本标题", "测试内容");
EditorGUILayout.LabelField("文本内容");
// 层级标签控件
layer = EditorGUILayout.LayerField("层级选择", layer);
tag = EditorGUILayout.TagField("标签选择", tag);
// 颜色获取控件
color = EditorGUILayout.ColorField(new GUIContent("自定义颜色获取"), color, true, true, true);
// 枚举选择
type = (E_TestType)EditorGUILayout.EnumPopup("枚举选择", type);
mul_type = (E_TestType)EditorGUILayout.EnumFlagsField("枚举多选", mul_type);
// 整数选择控件
num = EditorGUILayout.IntPopup("整数单选框", num, strs, ints);
EditorGUILayout.LabelField("整数单选框选中值", num.ToString());
// 按钮
if (EditorGUILayout.DropdownButton(new GUIContent("下拉按钮"), FocusType.Passive)) Debug.Log("你点击了下拉按钮");
if (EditorGUILayout.LinkButton("链接按钮")) Debug.Log("你点击了链接按钮");
//对象关联
gameObj = EditorGUILayout.ObjectField("关联资源对象", gameObj, typeof(GameObject), false) as GameObject;
//各类型输入控件
i = EditorGUILayout.IntField("Int输入框", i);
EditorGUILayout.LabelField("前面Int输入框内容", i.ToString());
i2 = EditorGUILayout.DelayedIntField("Int输入框", i2);//Delayed开头的输入控件和普通输入控件的区别:普通输入控件在输入时,会立即响应输入,而Delayed开头的输入控件只有在用户按 Enter 键或将焦点从字段移开之后,返回值才会修改。
EditorGUILayout.LabelField("前面Int输入框内容", i2.ToString());
l = EditorGUILayout.LongField("long输入框", l);
f = EditorGUILayout.FloatField("Float 输入:", f);
d = EditorGUILayout.DoubleField("double 输入:", d);
str = EditorGUILayout.TextField("Text输入:", str);
vec2 = EditorGUILayout.Vector2Field("Vec2输入: ", vec2);
vec3 = EditorGUILayout.Vector3Field("Vec3输入: ", vec3);
vec4 = EditorGUILayout.Vector4Field("Vec4输入: ", vec4);
rect = EditorGUILayout.RectField("rect输入: ", rect);
bounds = EditorGUILayout.BoundsField("Bounds输入: ", bounds);
boundsInt = EditorGUILayout.BoundsIntField("Bounds输入: ", boundsInt);
//折叠控件
isHide = EditorGUILayout.Foldout(isHide, "折叠控件", false);// 第二个参数为true代表点击整体都能展开收起,为false只能点击前面箭头展开收起
if (isHide)
{
EditorGUILayout.LabelField("折叠文本内容");
EditorGUILayout.LabelField("折叠文本内容2");
}
//折叠组控件
isHideGroup = EditorGUILayout.BeginFoldoutHeaderGroup(isHideGroup, "折叠组控件");//和折叠的主要区别是折叠组会高亮,且折叠组需要结束组
if (isHideGroup)
{
EditorGUILayout.LabelField("折叠组文本内容");
EditorGUILayout.LabelField("折叠组文本内容2");
}
EditorGUILayout.EndFoldoutHeaderGroup();
// 开关控件
isTog = EditorGUILayout.Toggle("开关控件", isTog);
isTogLeft = EditorGUILayout.ToggleLeft("左侧开关", isTogLeft);
//开关组控件
isTogGroup = EditorGUILayout.BeginToggleGroup("开关组控件", isTogGroup);
isTog1 = EditorGUILayout.Toggle("开关控件1", isTog1);
isTog2= EditorGUILayout.Toggle("开关控件2", isTog2);
EditorGUILayout.EndToggleGroup();
//滑动条控件
fSlider = EditorGUILayout.Slider("滑动条", fSlider, 0, 10);
iSlider = EditorGUILayout.IntSlider("整形滑动条", iSlider, 0, 10);
//双块滑动条控件
EditorGUILayout.MinMaxSlider("双块滑动条", ref leftV, ref rightV, 0, 10);
EditorGUILayout.LabelField(leftV.ToString());
EditorGUILayout.LabelField(rightV.ToString());
//提示框控件
EditorGUILayout.HelpBox("一般提示", MessageType.None);
EditorGUILayout.HelpBox("感叹号提示", MessageType.Info);
EditorGUILayout.HelpBox("警告符号提示", MessageType.Warning);
EditorGUILayout.HelpBox("错误符号提示", MessageType.Error);
//间隔控件
EditorGUILayout.Space(10);// 间隔控件
EditorGUILayout.LabelField("内容1");
EditorGUILayout.Space(50);// 间隔控件
EditorGUILayout.LabelField("内容2");
//动画曲线控件
curve = EditorGUILayout.CurveField("曲线控件", curve);
//布局相关API
EditorGUILayout.BeginHorizontal();// 开始水平布局
EditorGUILayout.LabelField("水平布局内容");
EditorGUILayout.LabelField("水平布局内容");
EditorGUILayout.LabelField("水平布局内容");
EditorGUILayout.EndHorizontal();// 结束水平布局
EditorGUILayout.BeginVertical();// 开始垂直布局
EditorGUILayout.LabelField("垂直布局内容");
EditorGUILayout.LabelField("垂直布局内容");
EditorGUILayout.LabelField("垂直布局内容");
EditorGUILayout.EndVertical();// 结束垂直布局
vec2Pos = EditorGUILayout.BeginScrollView(vec2Pos);// 开启滚动视图
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.LabelField("滚动视图内容");
EditorGUILayout.EndScrollView();// 结束滚动视图
}
}
效果
专栏推荐
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!