Version: 2021.3

PropertyScope

class in UnityEditor

切换到手册

描述

创建一个属性封装器,可用于使常规 GUI 控件与 SerializedProperty 配合使用。

大多数 EditorGUIEditorGUILayout 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 并开始相应的属性。