版本: 2021.3+
本示例演示如何在 C# 脚本中使用绑定路径进行绑定。
本示例创建一个自定义编辑器窗口,用于更改 游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、摄像机、航路点等。游戏对象的功能由附加到它的组件定义。 更多信息
查看 术语表 的名称。
您可以在此 GitHub 存储库 中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
查看 术语表 工具包和 C# 脚本编写的开发人员。在开始之前,请熟悉以下内容
在 C# 中创建一个带有 TextField
的自定义编辑器窗口。将绑定路径设置为游戏对象的名称属性,并显式调用 Bind()
方法。
在 Unity 中使用任何模板创建一个项目。
在您的 项目窗口显示 Assets
文件夹内容的窗口(项目选项卡) 更多信息
查看 术语表 中,创建一个名为 bind-with-binding-path
的文件夹来存储您的文件。
在 **bind-with-binding-path** 文件夹中,创建一个名为 Editor
的文件夹。
在 **Editor** 文件夹中,创建一个名为 SimpleBindingExample.cs
的 C# 脚本,并将其内容替换为以下内容
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 = "";
}
}
}
}