创建一个属性包装器,可用于使常规 GUI 控件与 SerializedProperty 一起使用。
大多数 EditorGUI 和 EditorGUILayout GUI 控件已经具有与 SerializedProperty 一起使用的重载。但是,对于不处理 SerializedProperty 的 GUI 控件,您可以在 BeginProperty 和 EndProperty 中将其包装,如以下示例所示。您也可以将其用于自己的自定义 GUI 控件。
BeginProperty 和 EndProperty 自动处理默认标签、预制体覆盖的粗体字、还原到预制体右键菜单,以及在多对象编辑时,如果属性的值不同,则将 showMixedValue 设置为 true。
using UnityEngine; using UnityEditor;
public class ExampleClass : MonoBehaviour { // A slider function that takes a SerializedProperty void Slider(Rect position, SerializedProperty prop, float leftValue, float rightValue, GUIContent label) { using (var scope = new EditorGUI.PropertyScope(position, label, prop)) { label = scope.content; EditorGUI.BeginChangeCheck(); var newValue = EditorGUI.Slider(position, label, prop.floatValue, leftValue, rightValue); // Only assign the value back if it was actually changed by the user. // Otherwise a single value will be assigned to all objects when multi-object editing, // even when the user didn't touch the control. if (EditorGUI.EndChangeCheck()) prop.floatValue = newValue; } } }
其他资源:BeginProperty。
content | 用于控件的实际标签。 |
EditorGUI.PropertyScope | 创建一个新的 PropertyScope 并开始相应的属性。 |