Version: 2021.3+
You can call BindProperty()
to bind an element to a SerializedProperty
object directly, instead of with the binding path. This example demonstrates how to bind with BindProperty()
.
This example creates a custom Editor window to change the name of a GameObject.
You can find the completed files that this example creates in this GitHub repository.
This guide is for developers familiar with the Unity Editor, UI Toolkit, and C# scripting. You are recommended to have a basic understanding of the following:
BindProperty()
Create a custom Editor window in C# with a TextField. Find the name property of a GameObject and bind to the property directly with the BindProperty()
method.
In your Project window, create a folder named bind-without-binding-path
to store your file.
In the bind-without-binding-path folder, create a folder named Editor
.
In the Editor folder, create a C# script named SimpleBindingPropertyExample.cs
and replace its contents with the following:
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();
}
}
}
}