Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup)
发表于2015-07-28
1. CurveField
创建的是一个类型为AnimationCurve的曲线变量,看代码:
创建的是一个类型为AnimationCurve的曲线变量,看代码:
[code]csharpcode:
using UnityEngine; using System.Collections; using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类 { private AnimationCurve _animationCurve = new AnimationCurve(); // 初始化一个曲线 [MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单 static void CreateWindow() // 下面这个函数必须是***静态的*** { // 在这里面创建窗口 EditorWindow.GetWindow(typeof(Editor2), false, "EditorWindow", true); } void OnGUI() { _animationCurve = EditorGUILayout.CurveField("AnimationCurve", _animationCurve); // 创建一个可编辑曲线区域 } }
要注意的几点:
(1)在使用CurveField函数时,必须先要初始化AnimationCurve变量,因为函数所返回的值必须要有个地方储存。而且函数要知道这条曲线上有几个关键点(KEY);
(2)AnimationCurve类型不能光从表面意思理解为动画曲线,它其实在定义一个不规则变量的时候有很大的作用,比如:
(3)CurveField中还可以改变曲线颜色和约束,这个大家就自行尝试了。
2. DoubleField
这是一个可以输入Double类型浮点值的输入区域,和FloatField的用法相同,我就不赘述了,直接上代码:
[code]csharpcode:
using UnityEngine; using System.Collections; using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类 { private double _doubleValue; // 声明一个Double变量 [MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单 static void CreateWindow() // 下面这个函数必须是***静态的*** { // 在这里面创建窗口 EditorWindow.GetWindow(typeof(Editor2), false, "EditorWindow", true); } void OnGUI() { _doubleValue = EditorGUILayout.DoubleField("DoubleField", _doubleValue); // 创建一个Double浮点型输入区域 } }
3. EnumMaskField、EnumPopup
EnumMaskField是一个可多选的枚举选择项,相对于EnumPopup,看代码和比较:
[code]csharpcode:
using UnityEngine; using System.Collections; using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类 { private enum EnumValue0 // 这里我们声明两个枚举类型 { value0 = 0, value1 = 1, value2 = 2 }; private EnumValue0 _enumValue0 = EnumValue0.value0; private enum EnumValue1 // 这里我们声明两个枚举类型 { value0 = 0, value1 = 1, value2 = 2 }; private EnumValue1 _enumValue1 = EnumValue1.value0; [MenuItem("EditorDemo/CreateWindow")] // 在编辑器中添加一个菜单 static void CreateWindow() // 下面这个函数必须是***静态的*** { // 在这里面创建窗口 EditorWindow.GetWindow(typeof(Editor2), false, "EditorWindow", true); } void OnGUI() { _enumValue0 = (EnumValue0)EditorGUILayout.EnumMaskField("EnumMaskField", _enumValue0); // 多选,单选,不选 _enumValue1 = (EnumValue1)EditorGUILayout.EnumPopup("EnumPopup", _enumValue1); // 单选 } }