Привязка с путем привязки в скрипте C#
Версия: 2021.3+
В этом примере показано, как привязать путем привязки в скрипте C#.
Примерный обзор
В этом примере создается пользовательское окно Редактора для изменения имени GameObject.
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Привязка с путем привязки
Создайте пользовательское окно Редактора в C# с TextField. Установите путь привязки к свойству name GameObject и сделайте явный вызов метода Bind().
Создайте проект в Unity с любым шаблоном.
В окне Project создайте папку
bind-with-binding-pathдля хранения вашего файла.В течение пути-привязки-с-привязкой папка, создать папку с названием
Editor.-
В течение Редактор папка, создать C# скрипт назван
SimpleBindingExample.csи заменить его содержание следующим:using UnityEditor; using UnityEngine; using UnityEditor.UIElements; using UnityEngine.UIElements; namespace UIToolkitExamples { public class SimpleBindingExample : EditorWindow { TextField m_ObjectNameBinding; [MenuItem("Window/UIToolkitExamples/Simple Binding Example")] public static void ShowDefaultWindow() { var wnd = GetWindow<SimpleBindingExample>(); wnd.titleContent = new GUIContent("Simple Binding"); } public void CreateGUI() { m_ObjectNameBinding = new TextField("Object Name Binding"); // Note: the "name" property of a GameObject is "m_Name" in serialization. m_ObjectNameBinding.bindingPath = "m_Name"; 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); // Bind it to the root of the hierarchy. It will find the right object to bind to. rootVisualElement.Bind(so); // Alternatively you can instead bind it to the TextField itself. // m_ObjectNameBinding.Bind(so); } else { // Unbind the object from the actual visual element that was bound. rootVisualElement.Unbind(); // If you bound the TextField itself, you'd do this instead: // m_ObjectNameBinding.Unbind(); // Clear the TextField after the binding is removed m_ObjectNameBinding.value = ""; } } } }
Проверка привязки
- В Unity выберите Окно > UIToolkitExamples > Simple Binding Example. Появится окно пользовательского редактора с текстовым полем.
- Выберите любой GameObject в вашей сцене. Имя GameObject появится в текстовом поле окна редактора. Если вы измените имя GameObject в текстовом поле, имя GameObject изменится.