创建一个属性封装器,可用于使常规 GUI 控件与 SerializedProperty 配合使用。
大多数 EditorGUI 和 EditorGUILayout GUI 控件已具有与 SerializedProperty 配合使用的重载。
但是,对于不处理 SerializedProperty 的 GUI 控件,您可以按以下所示示例将它们封装到 BeginProperty 和 EndProperty 中。
您也可以将其用于自己的自定义 GUI 控件。
如果在进行多对象编辑时遇到不同的属性值,BeginProperty 和 EndProperty 会自动处理默认标签、加粗预制件重载的字体、还原为预制件右键单击菜单,并在多对象编辑中涉及不同属性值的情况下,将 ·showMixedValue 设为 true。
class ExampleClass
{
// 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 并开始相应的属性。 |