(转)Unity笔记之编辑器(UnityEditor)
在使用unity3d的过程中,时常会需要从场景中寻找或者调用一个对象,而Unity就提供了一个贴心的功能——拖拽。用鼠标拖一下中比写堆代码直观的多吧!但是Unity提供的远远不止这一丢丢,下面我们来简单了解下UnityEditor部分的内容。
而Inspector中最最基本的就是把字段显示出来。给几个例子:
[code]csharpcode:
using UnityEngine;
using System.Collections; // 这里没有添加其他引用 public class Editor0 : MonoBehaviour
{
// 很简单的,仅仅是用public关键字来修饰而已,然后把脚本放到某个物体上
public int IntValue;
public float FloatValue;
public GameObject GameObjectValue;
public GameObject[] GameObjectValueList;
public Vector3 Vector3Value;
public enum EnumValue
{
Value0 = 0,
Value1 = 1,
Value2 = 2
};
// ......
}
然后就出现了这些东西,各种类型自己去对应。
这是最最基础的编辑器应用,接下去我们使用其他的方法。看下代码:
[code]csharpcode:
using UnityEngine;
using System.Collections; // 这里没有添加其他引用 public class Editor1 : MonoBehaviour
{
[SerializeField] // 这是强制序列化,就是它让私有变量也显示在了Inspector中
private int IntValue; // 下面的字段都是私有的
[SerializeField]
private float FloatValue;
[SerializeField]
private GameObject GameObjectValue;
[SerializeField]
private GameObject[] GameObjectValueList;
[SerializeField]
private Vector3 Vector3Value;
private enum EnumValue
{
Value0 = 0,
Value1 = 1,
Value2 = 2
};
[SerializeField]
private EnumValue Ev = EnumValue.Value0;
// ......
}
这里我们发现,即便是私有的字段,也被显示出来了,就是因为[SerializeField]的存在。像[SerializeField]这样的还有[NonSerialized]、[HideInInspector]、[AddComponentMenu("XXX/XX/XXX")] 等等,今天讲的不是这个话题,就不多做解释了。下面我们更深入了解一下。
1. 写一个自定义的编辑器窗口
[code]csharpcode:
using UnityEngine;
using System.Collections;
using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类
{
[MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单
static void CreateWindow() // 下面这个函数必须是***静态的***
{
// 在这里面创建窗口
}
}
上面是创建一个自定义窗口的基本框架,这里要注意的是MenuItem中的菜单名,可以在现有的菜单中添加,也可以新建一个菜单,但必须至少有一个子菜单。继续添加内容:
[code]csharpcode:
using UnityEngine;
using System.Collections;
using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类
{
[MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单
static void CreateWindow() // 下面这个函数必须是***静态的***
{
// 在这里面创建窗口
EditorWindow.GetWindow(typeof(Editor2), false, "EditorWindow", true);
}
}
我们添加了一句EditorWindow.GetWindow()来创建一个窗口,其中的参数(1)t:窗口类型;(2)utility:标准窗口(true)/内嵌窗口(false);(3)title:窗口的名称;(4)focus:焦点。标准窗口和内嵌窗口的区别我的理解是是否嵌入Unity的窗口中。
这样的话,点击EditorDemo那个菜单里的CreateWindow,就会出现一个空白窗口了。之后就应该要往窗口中添加内容。在编辑器类中也包括像MonoBehavior类里Start,Awake,Update之类的函数,其中OnGUI就用来绘制编辑器内容,看一段代码:
[code]csharpcode:
using UnityEngine;
using System.Collections;
using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类
{
bool toggle;
Color color;
AnimationCurve animationCurve = new AnimationCurve();
float floatValue = 0f;
bool foldOut;
enum EnumList
{
enum0 = 0,
enum1 = 1,
enum2 = 2
};
EnumList enumValue = EnumList.enum0; [MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单
static void CreateWindow() // 下面这个函数必须是***静态的***
{
// 在这里面创建窗口
EditorWindow.GetWindow(typeof(Editor2), false, "EditorWindow", true);
} void OnGUI()
{
toggle = EditorGUILayout.Toggle("Toggle", toggle);
EditorGUILayout.LabelField("This is a labelField");
color = EditorGUILayout.ColorField("Color", color);
animationCurve = EditorGUILayout.CurveField("AnimationCurve", animationCurve);
floatValue = EditorGUILayout.FloatField("FloatField", floatValue);
foldOut = EditorGUILayout.Foldout(foldOut, "FoldOut");
enumValue = (EnumList)EditorGUILayout.EnumPopup("EnumPopup", enumValue);
// ...... 功能还有很多,在之后的文章中,小贱会分多次讲解每个的具体用法,现在了解就可以了
}
}
Unity中自带的编辑器功能真的有很多,滑块,字符串输入,密码框,下拉框等等,制作简单的插件用于工程项目中已经是绰绰有余了。当然了,今天因为时间有限,Unity编辑器方面的内容也是大有讲究,所以我们只是做了简单的了解。之后的文章中,我会单个功能详细的去讲解。
(转)Unity笔记之编辑器(UnityEditor)的更多相关文章
- (转)Unity笔记之编辑器(BeginFadeGroup、BeginHorizontal、BeginScrollView) ... ...
1. BeginFadeGroup(float value) 这是EditorGUILayout中的一个函数,用来隐藏/显示在它包含的组中的内容.value则是显示内容的量,范围是0-1 . 比较下未 ...
- (转)Unity笔记之编辑器(BeginToggleGroup、BoundsField、ColorField) ...
1. BeginToggleGroup() BeginToggleGroup函数是定义了一个控制范围,可以控制该范围中的GUI是否启用,看下演示代码: [code]csharpcode: using ...
- (转)Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup) ... ...
1. CurveField创建的是一个类型为AnimationCurve的曲线变量,看代码: [code]csharpcode: using UnityEngine; using System.Col ...
- (转)Unity笔记之编辑器(Foldout、HelpBox、InspectorTitlebar、Slider、MinMaxSlid ...
1. Foldout.HelpBox 折叠菜单,大家都知道,不具体解释了,直接代码.因为折叠菜单中必然是有内容才能看到效果,所以顺带把HelpBox(提示框)也说了. [code]csharpcode ...
- 《Linux就该这么学》培训笔记_ch04_Vim编辑器与Shell命令脚本
<Linux就该这么学>培训笔记_ch04_Vim编辑器与Shell命令脚本 文章最后会post上书本的笔记照片. 文章主要内容: Vim编辑器 Shell脚本 流程控制语句 if语句 f ...
- 用SublimeText当Unity Shader的编辑器
用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来- 所以试着在网上找找,有没有类似的插件或者 ...
- 【Unity】自定义编辑器窗口——拓展编辑器功能
最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾. 新建一个脚本: using UnityEngine; using System.Collections; using UnityE ...
- 使用rider做为unity的代码编辑器
使用Rider做的编写Unity代码的IDE,记录一些与VS不相同的笔记 安装和设置方法: 我使用Rider 2019.1 + Unity3D 2018.3.4,在安装完Rider之后,在Unity中 ...
- 【Unity入门】编辑器常用视图介绍
版权声明:本文为博主原创文章,转载请注明出处. 打开Unity编辑器的主窗口,在窗口的右上角可以看到有个“Layout”按钮.这是用来对Unity编辑器主窗口上面的各个窗口面板进行布局的.通常情况下我 ...
随机推荐
- iOS开发-使用storyboard实现UILabel的自适应高度(iOS8)
好久没有写博客了.以后多写些博客,对自己是一种提升.对大家也是一种帮助 近期特别痴迷storyboard和xib的可视化编程,在写项目的时候遇到个问题就是怎样使UILabel自适应高度,查了好多文章博 ...
- 强大的vim配置文件,让编程更随意(转)
欢迎来到小码哥的博客 博客搬家啦 blog.ma6174.com 强大的vim配置文件,让编程更随意 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直 ...
- Unity 逻辑层通知UI 通过接口消除他们通信的switch判断
需求如何: 用户名字长度为2-12之间, 如果错误在界面上弹出一个消息框 写烂一点 public void PostRename(string name) { if (string.IsNullO ...
- Apache Drupal URL重写【转】
文章来源:http://www.cnblogs.com/ghj1976/archive/2010/07/19/1780844.html 在 drupal 跟目录下有个 .htaccess 文件, 这个 ...
- C#下载apk文件
string fileName = "name.apk";//客户端保存的文件名 string filePath = Server.MapPath("ap ...
- Python-常用字符串转换实例
当字符串是:'\u4e2d\u56fd' >>>s=['\u4e2d\u56fd','\u6e05\u534e\u5927\u5b66']>>>str=s[0].d ...
- 在go中使用leveldb --levi
github上有个比较好用的leveldb go wrapperlevigo, 安装之前需现在机器上安装leveldb 当前版本的LevelDB没有带安装脚本,需自行编译安装,过程如下: instal ...
- Python 射线法判断一个点坐标是否在一个坐标区域内
class Point: lng = '' lat = '' def __init__(self, lng, lat): self.lng = lng self.lat = lat # 求外包矩形 d ...
- python list插入、拼接
1可以使用"+"号完成操作 输出为: [1, 2, 3, 8, 'google', 'com'] 2.使用extend方法 . 输入相同 3使用切片 输出相同 PS:len(l1) ...
- 如何解决MySQL连接超时关闭
最近做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到M ...