Unity 6.3
0 онлайн 38 гостей 3 в системе
Вход

Привязка без пути привязки

Версия: 2021.3+

Вы можете вызвать BindProperty() для привязки элемента к объекту SerializedProperty непосредственно, вместо пути привязки. В этом примере показано, как связать с BindProperty().

Примерный обзор

В этом примере создается пользовательское окно Редактора для изменения имени GameObject.

Настраиваемое окно Unity Editor, которое позволяет изменить имя GameObjects.
Настраиваемое окно Unity Editor, которое позволяет изменить имя GameObject.

Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.

Предварительные условия

Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:

Связь с BindProperty()

Создайте настраиваемое окно Редактора в C# с TextField. Найдите свойство name GameObject и привязайте его к этому свойству непосредственно методом BindProperty().

  1. В окне Project создайте папку bind-without-binding-path для хранения вашего файла.

  2. В течение пути-привязки-без-привязки папка, создать папку с названием Editor.

  3. В течение Редактор папка, создать C# скрипт назван SimpleBindingPropertyExample.cs и заменить его содержание следующим:

    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();
                }
            }
        }
    }
    

Проверка привязки

  1. В Unity выберите Окно > UIToolkitExamples > Simple Binding Property Example. Появится окно пользовательского редактора с текстовым полем.
  2. Выберите GameObject в вашей сцене. Имя GameObject появится в текстовом поле окна редактора. Если вы измените имя GameObject в текстовом поле, то изменится и имя GameObject.

Дополнительные ресурсы