UEDL3-3——对象关联、各类型输入
UEDL3-3——对象关联、各类型输入
本章代码关键字
1 | EditorGUILayout.ObjectField() //在编辑器窗口上添加对象关联控件,可以关联一个Unity对象,需要配套一个Object变量 |
对象关联控件
ObjectField
控件可以让我们关联Unity的对象,例如:游戏对象(预设体),材质,音效,继承MonoBehaviour
的脚本等等
同样,需要一个继承Unity的Object
变量来表示关联了哪个对象,
需要将该变量传入到方法内,再由该变量接收本帧用户关联的对象(需要as
对应的类型)
该控件可以通过SerializedProperty
直接修改MonoBehaviour
脚本对象的属性,使用SerializedProperty
就不需要配套额外变量
- 参数一:序列化属性SerializedProperty,可直接修改
MonoBehaviour
脚本对象的属性,使用该参数则无需另外配套变量 - 参数二:文本标题(可选,可改为
GUIContent
) - 参数三:显示关联的对象(传入在外部声明的相应变量)
- 参数四:关联的对象的类型(需要继承自Unity的
Object
) - 参数五:是否可以关联场景上的对象资源(例如关联
GameObject
相关,如果该参数为false
,则只能关联工程文件夹里的预设体) - 参数六:
GUILayoutOption
(使用EditorGUI
绘制时可选) - 返回值:本帧关联的对象(Unity的
Object
类型,需要as
成对应类型,如果使用序列化属性就不需要接收了)
1 | GameObject obj; |
显示效果如下:
各类型输入控件
以下控件可以让我们输入各种类型的值,例如:int
、long
、float
、Vector3
、Rect
、Bounds
等等
同样,需要一个相对应的变量来表示该控件输入的值,
需要将该变量传入到方法内,再由该变量接收本帧用户输入的值
- 参数一:文本标题(可选,可改为
GUIContent
) - 参数二:显示输入的值(传入在外部声明的相应变量)
- 参数三:
GUIStyle
(可选) - 参数四:
GUILayoutOption
(使用EditorGUI
绘制时可选) - 返回值:本帧输入的值
一共有如下的输入控件:
-
int
变量:EditorGUILayout.IntField("Int输入:", int变量)
-
long
变量:EditorGUILayout.LongField("long输入:", long变量)
-
float
变量:EditorGUILayout.FloatField("Float输入:", float变量)
-
double
变量:EditorGUILayout.DoubleField("double输入:", double变量)
-
string
变量:EditorGUILayout.TextField("Text输入:", string变量)
-
Vector2
变量:EditorGUILayout.Vector2Field("Vec2输入: ", vector2变量)
-
Vector3
变量:EditorGUILayout.Vector3Field("Vec3输入: ", vector3变量)
-
Vector4
变量:EditorGUILayout.Vector4Field("Vec4输入: ", vector4变量)
-
Rect
变量:EditorGUILayout.RectField("rect输入:", rect变量)
-
Bounds
变量:EditorGUILayout.BoundsField("Bounds输入: ", bounds变量)
-
BoundsInt
变量:EditorGUILayout.BoundsIntField("Bounds输入: ", boundsInt变量)
Bounds
:包围盒,类似于两个Vector3组合,一个是中心点,另一个是范围盒体
1 | int i; |
显示效果如下:
注意:EditorGUILayout
中还有一些Delayed
开头的输入控件,
他们和普通输入控件最主要的区别是:在用户按 Enter 键或将焦点从字段移开之前,返回值不会更改
1 | int i1, i2; |
显示效果如下:
观察显示内容发现,由EditorGUILayout.DelayedIntField
绘制的控件,在输入值按下回车键或将焦点从字段移开之前,返回值不会更改
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!