版本: 2021.3+
此示例演示了如何在自定义 Inspector一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表、自定义编辑器和序列化对象之间创建绑定。
此示例创建以下内容
InspectorElement
内创建相同的绑定。您可以在此 GitHub 存储库 中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容
CreateInspectorGUI
InspectorElement
定义一个名为 TankScript
的自定义 Inspector UI 类,使用 USS 为其设置样式,并在 UXML 中设置 视觉元素视觉树的节点,它实例化或派生自 C# VisualElement
类。您可以设置其外观,定义其行为,并将其作为 UI 的一部分显示在屏幕上。 更多信息
参见 术语表 和绑定路径。
在您的 项目窗口一个显示 Assets
文件夹内容的窗口(项目选项卡) 更多信息
参见 术语表 中,创建一个名为 create-a-binding-inspector
的文件夹来存储所有文件。
创建一个名为 TankScript.cs
的 C# 脚本,并将它的内容替换为以下内容
using UnityEngine;
[ExecuteInEditMode]
public class TankScript : MonoBehaviour
{
public string tankName = "Tank";
public float tankSize = 1;
private void Update()
{
gameObject.name = tankName;
gameObject.transform.localScale = new Vector3(tankSize, tankSize, tankSize);
}
}
在 create-a-binding-inspector 文件夹中,创建一个名为 Editor
的文件夹。
在 Editor 文件夹中,创建一个名为 tank_inspector_styles.uss
的 USS 文件,并将它的内容替换为以下内容
.container {
background-color: rgb(80, 80, 80);
flex-direction: column;
}
Label {
background-color: rgb(80, 80, 80);
}
TextField:hover {
background-color: rgb(255, 255, 0);
}
FloatField {
background-color: rgb(0, 0, 255);
}
创建一个名为 tank_inspector_uxml.uxml
的 UXML 文件,并将它的内容替换为以下内容
<UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
<Style src="tank_inspector_styles.uss" />
<VisualElement name="row" class="container">
<Label text="Tank Script - Custom Inspector" />
<ue:PropertyField binding-path="tankName" name="tank-name-field" />
<ue:PropertyField binding-path="tankSize" name="tank-size-field" />
</VisualElement>
</UXML>
创建一个 C# 脚本,为 TankScript
注册自定义 Inspector。您不需要调用 Bind()
方法,因为 Inspector 窗口中的绑定是隐式的。
创建一个名为 TankEditor.cs
的 C# 脚本,并将它的内容替换为以下内容
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
[CustomEditor(typeof(TankScript))]
public class TankEditor : Editor
{
[SerializeField]
VisualTreeAsset visualTree;
public override VisualElement CreateInspectorGUI()
{
var uxmlVE = visualTree.CloneTree();
return uxmlVE;
}
}
在项目窗口中,选择 TankEditor.cs
。
将 tank_inspector_uxml.uxml
拖放到 Inspector 中的 视觉树。
将 tank_inspector_styles.uss
拖放到 Inspector 中的 样式表。
TankScript.cs
拖放到 Inspector 中的 添加组件。这将在 Inspector 中生成 坦克脚本 组件。InspectorElement
绑定创建一个自定义编辑器窗口,其中包含两个字段,这些字段绑定到 TankScript
对象。创建一个调用 InspectorElement
构造函数 的 C# 脚本。 InspectorElement
创建 UI 并自动将 UI 绑定到对象。
创建一个名为 SimpleBindingExampleInspectorElement.cs
的 C# 文件,并将它的内容替换为以下内容
using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
namespace UIToolkitExamples
{
public class SimpleBindingExampleInspectorElement : EditorWindow
{
[MenuItem("Window/UIToolkitExamples/Simple Binding Example Inspector Element")]
public static void ShowDefaultWindow()
{
var wnd = GetWindow<SimpleBindingExampleInspectorElement>();
wnd.titleContent = new GUIContent("Simple Binding with Inspector Element");
}
TankScript m_Tank;
public void OnEnable()
{
m_Tank = FindObjectOfType<TankScript>();
if (m_Tank == null)
return;
var inspector = new InspectorElement(m_Tank);
rootVisualElement.Add(inspector);
}
}
}