前两篇分别讲解了创建菜单https://www.cnblogs.com/xiaoyulong/p/10115053.html和创建窗口https://www.cnblogs.com/xiaoyulong/p/10120565.html

这一篇我们讲解使用 GUI 来绘制我们的窗口,使窗口内容更丰富、美观

绘制窗口我们一般会使用下面四个类:GUI、GUILayout、EditorGUI、EditorGUILayout。

这四个类大同小异,基本上没什么差别,和我们经常使用的 UGUINGUI 相比,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绘制窗口的更多相关文章

  1. Unity3D编辑器扩展(六)——模态窗口

    前面我们已经写了5篇关于编辑器的,这是第六篇,也是最后一篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)—— ...

  2. Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类

    前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...

  3. Unity3D编辑器扩展(四)——扩展自己的组件

    前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...

  4. Unity3D编辑器扩展(二)——定义自己的窗口

    上一篇我们讲了如何定义菜单按钮 https://www.cnblogs.com/xiaoyulong/p/10115053.html 这一篇我们讲如何定义自己的窗口. 定义窗口我们需要继承 Edito ...

  5. unity3D编辑器扩展

    编辑器扩展只是在编辑项目中运行,发布出来是不会运行的. 固定创建一个文件夹Editor:所有的资源或者代码都不会被打包进去. 01.使用MenuItem添加菜单栏按钮 脚本不需要作为组件存在,可以不用 ...

  6. Unity3d编辑器扩展学习笔记

    编辑器扩展 1.添加菜单栏:把特性应用于静态方法 参数1:菜单名的空格后面是定义快捷键(单符号得用"_"开头,组合键%=Ctrl,#=Shift,&=Alt) 参数2:通过 ...

  7. Unity3D编辑器扩展(一)——定义自己的菜单按钮

    Unity3D 引擎的编辑器拥有很强的扩展性,用的好可以帮我们省很多事情.在这里记录下如何去扩展 Unity3D 的编辑器,定制属于我们自己的开发环境. 本篇主要讲解在 Unity3D 引擎的各个窗口 ...

  8. unity编辑器扩展_08(创建自定义窗口)

    代码: using UnityEngine;using UnityEditor; public class MyWidow : EditorWindow{    [MenuItem("Win ...

  9. [Unity3D]编辑器扩展之数组或List显示

    效果如下: 源码如下: using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace XM.Edi ...

随机推荐

  1. 如何激活已经运行过的Activity, 而不是重新启动新的Activity

    Intent i=new Intent(this,Activity1.class);   i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   st ...

  2. python windows环境响铃

    import winsound winsound.Beep(600,1000) #其中600表示声音大小,1000表示发生时长,1000为1秒

  3. CentOS 7 安装MongoDB

    一.安装 1.进入网址 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 按照官方指南进行安装 2.创建文件 / ...

  4. TZOJ 2289 Help Bob(状压DP)

    描述 Bob loves Pizza but is always out of money. One day he reads in the newspapers that his favorite ...

  5. Python学习笔记5程序的控制结构

    1.分支结构 (1)单分支结构 (2)二分支结构 (3)多分支结构 条件判断 (4)程序的异常处理 2.实例:身体质量指数BMI 思路一(国内,稍作修改就是国际): 思路二: height,weigh ...

  6. vscode 好用插件

    1.查询文件路径../../有提示:  Path Intellisense 2.require 时的包提示(最新版的vscode已经集成此功能) : Npm Intellisense 3.自动帮你完成 ...

  7. Codeforces Round #553 (Div. 2) B题

    题目网址:http://codeforces.com/contest/1151/problem/B 题目大意:给定一个n*m的矩阵,问是否可以从每一行中选择一个数,使得这n个数异或大于0,如果可以还要 ...

  8. 新建VS工程与填坑:解决方案与项目不在同一目录

    A.新建项目->空工程 B.添加依赖库 1.属性->C/C++->附加包含目录 注:添加头文件目录,必须指向子文件夹 2.属性->链接器->常规->附加库目录 注: ...

  9. 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程

    参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...

  10. 十二、针对单个工程来配置jdk版本

    转载自:https://jingyan.baidu.com/article/9f63fb91427b06c8400f0e98.html 首先小编这里的eclipse工作空间默认的jdk版本是jdk1. ...