Unity3D编辑器扩展(三)——使用GUI绘制窗口
前两篇分别讲解了创建菜单https://www.cnblogs.com/xiaoyulong/p/10115053.html和创建窗口https://www.cnblogs.com/xiaoyulong/p/10120565.html
这一篇我们讲解使用 GUI 来绘制我们的窗口,使窗口内容更丰富、美观
绘制窗口我们一般会使用下面四个类:GUI、GUILayout、EditorGUI、EditorGUILayout。
这四个类大同小异,基本上没什么差别,和我们经常使用的 UGUI 和 NGUI 相比,UGUI 和 NGUI 有图形化的操作,而这四个类是纯代码操作。
GUI、EditorGUI 和 GUILayout、EditorGUILayout 的区别是:前者是固定布局,布局需要我们写代码控制,后者是自动布局。
GUI、GUILayout 和 EditorGUI、EditorGUILayout 的区别是:前者更多的用在平常调试中,后者在编辑器中使用。前者也可以使用在编辑器中。
其他的也不多说了,全是一些 API 的使用,下面我就用 EditorGUI 和 EditorGUILayout 写个小例子,给大家看一下
代码:
using UnityEngine;
using UnityEditor; public class EditorGUILayoutTest : EditorWindow
{
private Vector3 startPoint;//起点
private Vector3 endPoint;//终点
private float distance = 0f;//起点到终点的距离 private bool val;
private Color color = Color.red; private AnimationCurve curveX = AnimationCurve.Linear(, , , );
private AnimationCurve curveY = AnimationCurve.Linear(, , , );
private AnimationCurve curveZ = AnimationCurve.Linear(, , , ); private int sliderValue = ;
private bool showClose = true;
private bool showToggleLeft = true;
private string textfieldtest = "textfieldtest";
private string password = "pwd123456"; private float minVal = -10.0f;
private float minLimit = -20.0f;
private float maxVal = 10.0f;
private float maxLimit = 20.0f; [MenuItem("MyWindow/WindowTest")]
private static void Init()
{
EditorGUILayoutTest window = (EditorGUILayoutTest)EditorWindow.GetWindow(typeof(EditorGUILayoutTest));
window.Show();
} private void OnGUI()
{
//Vector3类型数据的显示
startPoint = EditorGUILayout.Vector3Field("Start Point:", startPoint);
endPoint = EditorGUILayout.Vector3Field("End Point:", endPoint);
//只读的标签
EditorGUILayout.LabelField("Distance:", Vector3.Distance(startPoint, endPoint).ToString("f2"));
//勾选框
val = EditorGUILayout.Toggle("Can Jump", val);
//是否开启禁用功能。false表示禁用关闭,true表示开启禁用--灰色状态
EditorGUI.BeginDisabledGroup(val);//
//float类型文本Text
EditorGUILayout.FloatField("跳跃高度:", 100.0f);
//结束禁用
EditorGUI.EndDisabledGroup();
EditorGUILayout.FloatField("跳跃频率:", 1.85f);
//Bounds输入框
EditorGUILayout.BoundsField("BoundsField", new Bounds(new Vector3(, , ), new Vector3(, , )));
//颜色选择框
color = EditorGUILayout.ColorField("颜色:", color);
//按钮
if (GUILayout.Button("Close"))
{
this.Close();
}
//带有阴影的Label
EditorGUI.DropShadowLabel(new Rect(, , position.width, ), "带有阴影的Label");
//动画曲线
curveX = EditorGUI.CurveField(new Rect(, , position.width - , ), "Animation on X", curveX);
curveY = EditorGUI.CurveField(new Rect(, , position.width - , ), "Animation on Y", curveY);
curveZ = EditorGUI.CurveField(new Rect(, , position.width - , ), "Animation on Z", curveZ);
//数字输入
EditorGUI.DelayedDoubleField(new Rect(, , position.width - , ), "DelayedDoubleField1", 25.0);
EditorGUI.DelayedFloatField(new Rect(, , position.width - , ), "DelayedFloatField", 25.0f);
EditorGUI.DelayedIntField(new Rect(, , position.width - , ), "DelayedIntField", );
EditorGUI.DelayedTextField(new Rect(, , position.width - , ), "DelayedTextField");
//绘画矩形
EditorGUI.DrawRect(new Rect(, , position.width - , ), Color.green);
//滑动条。输入框(值不能滑动): 注意左边必须要有值接收这个值,否则不能滑动
sliderValue = EditorGUI.IntSlider(new Rect(, , position.width - , ), sliderValue, , );
//帮助盒子信息框
EditorGUI.HelpBox(new Rect(, , position.width - , ), "HelpBox帮助盒子", MessageType.Info);
//Toggle 开关
showClose = EditorGUI.Toggle(new Rect(, , position.width - , ), "Toggle", showClose);
showToggleLeft = EditorGUI.ToggleLeft(new Rect(, , position.width - , ), "ToggleLeft", showToggleLeft);
textfieldtest = EditorGUI.TextField(new Rect(, , position.width - , ), "TextField", textfieldtest);
password = EditorGUI.PasswordField(new Rect(, , position.width - , ), "密码框:", password);
//最大值和最小值滑块
EditorGUI.MinMaxSlider(new Rect(, , position.width - , ), ref minVal, ref maxVal, minLimit, maxLimit);
} private void OnInspectorUpdate()
{
this.Repaint();
}
}
效果图:

Unity3D编辑器扩展(三)——使用GUI绘制窗口的更多相关文章
- Unity3D编辑器扩展(六)——模态窗口
前面我们已经写了5篇关于编辑器的,这是第六篇,也是最后一篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)—— ...
- Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类
前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...
- Unity3D编辑器扩展(四)——扩展自己的组件
前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...
- Unity3D编辑器扩展(二)——定义自己的窗口
上一篇我们讲了如何定义菜单按钮 https://www.cnblogs.com/xiaoyulong/p/10115053.html 这一篇我们讲如何定义自己的窗口. 定义窗口我们需要继承 Edito ...
- unity3D编辑器扩展
编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...
- Unity3d编辑器扩展学习笔记
编辑器扩展 1.添加菜单栏:把特性应用于静态方法 参数1:菜单名的空格后面是定义快捷键(单符号得用"_"开头,组合键%=Ctrl,#=Shift,&=Alt) 参数2:通过 ...
- Unity3D编辑器扩展(一)——定义自己的菜单按钮
Unity3D 引擎的编辑器拥有很强的扩展性,用的好可以帮我们省很多事情.在这里记录下如何去扩展 Unity3D 的编辑器,定制属于我们自己的开发环境. 本篇主要讲解在 Unity3D 引擎的各个窗口 ...
- unity编辑器扩展_08(创建自定义窗口)
代码: using UnityEngine;using UnityEditor; public class MyWidow : EditorWindow{ [MenuItem("Win ...
- [Unity3D]编辑器扩展之数组或List显示
效果如下: 源码如下: using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace XM.Edi ...
随机推荐
- ArcGIS案例教程-通过点坐标生成矩形
ArcGIS案例教程-通过点坐标生成矩形 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:以点坐标为中心,通过指定尺寸,生成矩形 成果形式:绿色工具,免安装,不 ...
- 《DOM Scripting》学习笔记-——第四章 案列分析 JS美术馆(点击链接到图片)
实现效果:点击图片链接,可以在当前网页显示图片,并且显示图片标题. Html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN&qu ...
- 在java程序当中怎么获取一个文件的路径
在java程序当中怎么获取一个文件的路径? * 当这个文件在类路径下的时候(在src/bin目录下的时候): String absolutePath = Thread.currentThread(). ...
- 交叉熵理解:softmax_cross_entropy,binary_cross_entropy,sigmoid_cross_entropy简介
cross entropy 交叉熵的概念网上一大堆了,具体问度娘,这里主要介绍深度学习中,使用交叉熵作为类别分类. 1.二元交叉熵 binary_cross_entropy 我们通常见的交叉熵是二元交 ...
- [Solution] 893. Groups of Special-Equivalent Strings
Difficulty: Easy Problem You are given an array A of strings. Two strings S and T are special-equiva ...
- 通信导论-IP数据网络基础(1)
TCP/IP封装过程: 端口号:服务器一般都是通过知名端口号(1~1023)来识别应用程序,(TCP)21.23.25,(UDP)53.69.161 TCP报文格式: 字节号:TCP把连接中发送的所有 ...
- 记录-springcloud -mybatis
搭建springcloud与mybatis 从数据库读取数据返回到浏览器 1:我的工程目录 entity 和mapper 中的代码 controller和service的代码 启动类的文件:记得加包 ...
- jquery全选的选中和取消选中
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 分析easyswoole3.0源码,服务启动为例(二)
以下内容需要结合es的源码,不然可能会觉得跳跃.先描述下es启动的大致流程.es启动的时候注册异常处理函数以及加载配置文件.根据位置文件的设置选择启动哪种swoole服务.然后用一个事件注册类,注册s ...
- ubuntu/debian 多版本gcc共存
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -ysudo apt-get update -ysudo apt-get install gcc ...