【unity游戏开发——编辑器扩展】使用EditorGUI的EditorGUILayout绘制工具类在自定义编辑器窗口绘制各种UI控件
注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
文章目录
- 前言
- 常用的EditorGUILayout控件
- 专栏推荐
- 完结
前言
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);//布局相关APIEditorGUILayout.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();// 结束滚动视图}
}
效果
专栏推荐
地址 |
---|
【unity游戏开发入门到精通——C#篇】 |
【unity游戏开发入门到精通——unity通用篇】 |
【unity游戏开发入门到精通——unity3D篇】 |
【unity游戏开发入门到精通——unity2D篇】 |
【unity实战】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
【unity游戏开发——模型篇】 |
【unity游戏开发——InputSystem】 |
【unity游戏开发——Animator动画】 |
【unity游戏开发——UGUI】 |
【unity游戏开发——联网篇】 |
【unity游戏开发——优化篇】 |
【unity游戏开发——shader篇】 |
【unity游戏开发——编辑器扩展】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
相关文章:

【unity游戏开发——编辑器扩展】使用EditorGUI的EditorGUILayout绘制工具类在自定义编辑器窗口绘制各种UI控件
注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言常用的EditorGUILayout控件专栏推荐完结 前言 EditorG…...

Linux基础第三天
系统时间 date命令,date中文具有日期的含义,利用该命令可以查看或者修改Linux系统日期和时间。 基本格式如下: gecubuntu:~$ date gecubuntu:~$ date -s 日期时间 // -s选项可以设置日期和时间 文件权限 chmod命令,是英文…...

MoodDrop:打造一款温柔的心情打卡单页应用
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念:我想做一款温柔的情绪应用 「今天的你,心情如何?」 有时候&#x…...

接口——类比摄像
最近迷上了买相机,大疆Pocket、Insta Go3、大疆Mini3、佳能50D、vivo徕卡人像大师(狗头),在买配件的时候,发现1/4螺口简直是神中之神,这个万能接口让我想到计算机设计中的接口,遂有此篇—— 接…...
【上位机——WPF】布局控件
布局控件 常用布局控件Panel基类Grid(网格)UniformGrid(均匀分布)StackPanel(堆积面板)WrapPanel(换行面板)DockerPanel(停靠面板)Canvas(画布布局)Border(边框)GridSplitter(分割窗口)常用布局控件 Grid:网格,根据自定义行和列来设置控件的布局StackPanel:栈式面板,包含的…...
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用 引言 在现代分布式系统中,消息队列是实现异步通信和解耦的重要组件。Apache Kafka作为一种高性能、分布式的消息系统,被广泛应用于大数据和实时数据处理场景。本文将详细介绍如何在…...

二十、案例特训专题3【系统设计篇】web架构设计
一、前言 二、内容提要 三、单机到应用与数据分离 四、集群与负载均衡 五、集群与有状态无状态服务 六、ORM 七、数据库读写分离 八、数据库缓存Memcache与Redis 九、Redis数据分片 哈希分片如果新增分片会很麻烦,需要把之前数据取出来再哈希除模 一致性哈希分片是…...

【数据结构与算法】ArrayList 与顺序表的实现
目录 一、List 接口 1.1 List 接口的简单介绍 1.1 常用方法 二、顺序表 2.1 线性表的介绍 2.2 顺序表的介绍 2.3 顺序表的实现 2.3.1 前置条件:自定义异常 2.3.2 顺序表的初始化 2.3.2 顺序表的实现 三、ArrayList 实现类 3.1 ArrayList 的两种使用方式 3.2 Array…...
处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)
Python脚本,用于处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)指标。以下是代码的逐部分解释: 1. **导入库**: - `pandas`:用于数据处理和CSV文件操作。 - `numpy`:用于数值计算。 - `ElasticNet`:来自`sklearn.linear_model`,用于线性…...

【图像处理基石】OpenCV中都有哪些图像增强的工具?
OpenCV 图像增强工具系统性介绍 OpenCV 提供了丰富的图像增强工具,主要分为以下几类: 亮度与对比度调整 线性变换(亮度/对比度调整)直方图均衡化自适应直方图均衡化(CLAHE) 滤波与平滑 高斯滤波中值滤波双…...

WPS PPT设置默认文本框
被一个模板折磨了好久,每次输入文本框都是很丑的24号粗体还有行标,非常恶心,我甚至不知道如何描述自己的问题,非常憋屈,后来终于知道怎么修改文本框了。这种软件操作问题甚至不知道如何描述问题本身,非常烦…...

PostGIS实现矢量数据转栅格数据【ST_AsRaster】
ST_AsRaster函数应用详解:将矢量数据转换为栅格数据 [文章目录] 一、函数概述 二、函数参数与分组说明 三、核心特性与注意事项 四、示例代码 五、应用场景 六、版本依赖 七、总结 一、函数概述 ST_AsRaster是PostGIS中用于将几何对象(如点、线…...

FAST-DDS源码分析PDP(一)
准备开一个FAST-DDS源码分析系列,源码版本FAST-DDS 1.1.0版本。 FAST-DDS这种网络中间件是非常复杂的,所以前期先去分析每个类的作用是什么,然后在结合RTPS DOC,FAST-DDS DEMO,以及FAST-DDS的doc去串起来逻辑。 Builtin Discovery…...

python打卡day29@浙大疏锦行
知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等&…...

【数据结构】2-3-1单链表的定义
数据结构知识点合集 知识点 单链表存储结构 优点:不要求大片连续空间,改变容量方便;缺点:不可随机存取,要耗费一定空间存放指针 /*单链表节点定义*/ typedef struct LNode{ElemType data;struct LNode *next; }LNo…...

贝塞尔曲线原理
文章目录 一、 低阶贝塞尔曲线1.一阶贝塞尔曲线2. 二阶贝塞尔曲线3. 三阶贝塞尔曲线 一、 低阶贝塞尔曲线 1.一阶贝塞尔曲线 如下图所示, P 0 P_0 P0, P 1 P_1 P1 是平面中的两点,则 B ( t ) B ( t ) B(t) 代表平面中的一段线段。…...

3D个人简历网站 4.小岛
1.模型素材 在Sketchfab上下载狐狸岛模型,然后转换为素材资源asset,嫌麻烦直接在网盘链接下载素材, Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…...

创建型:原型模式
目录 1、核心思想 2、实现方式 2.1 基本结构 2.2 代码示例(Java) 3、适用场景 4、new与clone实际场景建议 1、核心思想 目的:通过复制(克隆)现有对象来创建新对象,而不是通过new关键字实例化。对于那…...
浅谈“量子计算应用:从基础原理到行业破局”
量子计算应用:从基础原理到行业破局 引言:量子计算为何成为科技革命新引擎? 量子计算利用量子力学原理(叠加态、纠缠态、量子干涉)突破经典计算的极限,在特定领域可实现指数级加速。根据中研普华预测,2025年全球量子计算市场规模将突破80亿美元,2035年可达8117亿美元。…...
Java面试攻略:从Spring Boot到微服务架构的深入探讨
Java面试攻略:从Spring Boot到微服务架构的深入探讨 场景设定 在一家知名互联网大厂的会议室里,资深面试官王老师正在对一位求职者谢飞机进行技术面试。谢飞机是一位幽默风趣的程序员,他的回答有时让人捧腹大笑。 第一轮:核心技…...
关于文件分片的介绍和应用
文件分片,顾名思义,就是将一个大文件分割成多个小的文件块(chunk)。每个文件块都是原始文件的一部分,并可以通过特定的方式将这些小文件块重新组装成原始文件。 1. 基本原理: 文件分片从底层来看,主要是对…...

Tapered Off-Policy REINFORCE_ 如何为LLM实现稳定高效的策略优化?
Tapered Off-Policy REINFORCE: 如何为LLM实现稳定高效的策略优化? 在大语言模型(LLM)的微调领域,强化学习(RL)正成为提升复杂任务性能的核心方法。本文聚焦于一篇突破性论文,其提出的Tapered …...
使用lvm进行磁盘分区
使用lvm进行磁盘分区 目的: 使用/dev/vdb创建一个5g的逻辑卷挂载到/mnt/lvmtest 前提: /dev/vdb是一块干净的空磁盘,数据会被清空!!! 1. 创建物理卷(PV): pvcreate /dev/sdb2. 验证…...

[Java实战]Spring Boot整合Elasticsearch(二十六)
[Java实战]Spring Boot整合Elasticsearch(二十六) 摘要:本文通过完整的实战演示,详细讲解如何在Spring Boot项目中整合Elasticsearch,实现数据的存储、检索和复杂查询功能。包含版本适配方案、Spring Data Elasticsea…...

图像分割(1)U-net
一、整体结构 虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在&a…...
数位和:从定义到编程实现
1. 定义 数位和(Digit Sum)是指一个数的每一位数字相加的总和。例如: 123 的数位和:1 2 3 645 的数位和:4 5 9 2. 计算方法 计算数位和的通用步骤: 提取每一位数字:从右到左&…...

2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通
前言 自安卓7.0高版本系统不在信任用户证书,https抓包方式市面查找方法太过复杂手机要root等,前置条件要求太高太复杂,看的头痛,今天一台电脑按步骤操作完即可抓包https,给大家搞定抓包https问题。支持直接编辑修改请求参…...

使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
python 自动化教程
文章目录 前言整数变量字符串变量列表变量算术操作比较操作逻辑操作if语句for循环遍历列表while循环定义函数调用函数导入模块使用模块中的函数启动Chrome浏览器打开网页定位元素并输入内容提交表单关闭浏览器发送GET请求获取网页内容使…...

简单使用Slidev和PPTist
简单使用Slidev和PPTist 1 简介 前端PPT制作有很多优秀的工具包,例如:Slidev、revealjs、PPTist等,Slidev对Markdown格式支持较好,适合与大模型结合使用,选哟二次封装;revealjs适合做数据切换,…...