版本: 2021.3+
您可以调用BindProperty() 将元素直接绑定到 SerializedProperty 对象,而不是使用绑定路径。此示例演示如何使用BindProperty() 进行绑定。
此示例创建一个自定义编辑器窗口,用于更改游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的特性由附加在其上的组件定义。 更多信息
参见 术语表的名称。
 
您可以在此GitHub 存储库中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容
BindProperty() 进行绑定在 C# 中创建一个自定义编辑器窗口,其中包含一个文本字段。查找游戏对象的名称属性,并使用BindProperty() 方法直接绑定到该属性。
在您的项目窗口显示您的 Assets 文件夹内容的窗口(项目选项卡) 更多信息
参见 术语表中,创建一个名为 bind-without-binding-path 的文件夹以存储您的文件。
在 bind-without-binding-path 文件夹中,创建一个名为 Editor 的文件夹。
在 Editor 文件夹中,创建一个名为 SimpleBindingPropertyExample.cs 的 C# 脚本,并将其内容替换为以下内容
using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace UIToolkitExamples
{
    public class SimpleBindingPropertyExample : EditorWindow
    {
        TextField m_ObjectNameBinding;
        [MenuItem("Window/UIToolkitExamples/Simple Binding Property Example")]
        public static void ShowDefaultWindow()
        {
            var wnd = GetWindow<SimpleBindingPropertyExample>();
            wnd.titleContent = new GUIContent("Simple Binding Property");
        }
            
        public void CreateGUI()
        {
            m_ObjectNameBinding = new TextField("Object Name Binding");
            rootVisualElement.Add(m_ObjectNameBinding);
            OnSelectionChange();
        }
        public void OnSelectionChange()
        {
            GameObject selectedObject = Selection.activeObject as GameObject;
            if (selectedObject != null)
            {
                // Create the SerializedObject from the current selection
                SerializedObject so = new SerializedObject(selectedObject);
                // Note: the "name" property of a GameObject is actually named "m_Name" in serialization.
                SerializedProperty property = so.FindProperty("m_Name");
                // Bind the property to the field directly
                m_ObjectNameBinding.BindProperty(property);
            }
            else
            {
                // Unbind any binding from the field
                m_ObjectNameBinding.Unbind();
            }
        }
    }
}