版本: Unity 6 (6000.0)
语言英语
  • C#

EditorGUI.BeginProperty

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static GUIContent BeginProperty(Rect totalPosition, GUIContent label, SerializedProperty property);

参数

totalPosition 屏幕上用于控件的矩形,包括标签(如果适用)。
label 滑块前面的可选标签。使用 null 使用 SerializedProperty 中的名称。使用 GUIContent.none 不显示标签。
property 用于控件的 SerializedProperty。

返回值

GUIContent 用于控件的实际标签。

描述

创建一个属性包装器,有助于使常规 GUI 控件与 SerializedProperty 一起使用。

大多数 EditorGUIEditorGUILayout GUI 控件已经具有与 SerializedProperty 一起使用的重载。但是,对于不处理 SerializedProperty 的 GUI 控件,您可以将它们包装在 BeginProperty 和 EndProperty 中,如下面的示例所示。您也可以将此用于自己的自定义 GUI 控件。

BeginProperty 和 EndProperty 自动处理默认标签、Prefab 覆盖的粗体字体、恢复到 Prefab 的右键单击菜单,以及在多对象编辑时,如果属性的值不同,则将 showMixedValue 设置为 true。

using UnityEngine;
using UnityEditor;

class Example : MonoBehaviour { // A slider function that takes a SerializedProperty void Slider(Rect position, SerializedProperty property, float leftValue, float rightValue, GUIContent label) { label = EditorGUI.BeginProperty(position, label, property);

EditorGUI.BeginChangeCheck(); var newValue = EditorGUI.Slider(position, label, property.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()) { property.floatValue = newValue; } EditorGUI.EndProperty(); } }

其他资源: EndProperty.