Version: 6000.3
语言: 中文
使用 UXML 和 C# 脚本绑定
绑定到嵌套属性

使用检查器创建绑定

版本: 2021.3+

该示例演示了如何在自定义检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
、自定义编辑器和序列化对象。

示例概述

此示例创建以下内容:

  • 自定义 Inspector UI 组件,其中包含两个绑定到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
    请参阅术语表
    的名称和 USS 变形的规模。
  • 自定义编辑器窗口,用于在InspectorElement.
显示 Unity 编辑器窗口和检查器,其中包含用于更改游戏对象名称的自定义字段和用于调整其大小的自定义字段。
显示 Unity 编辑器窗口和检查器,其中包含用于更改游戏对象名称的自定义字段和用于调整其大小的自定义字段。

您可以在此 GitHub 存储库中找到此示例创建的已完成文件。

先决条件

本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容:

定义自定义 Inspector 组件

定义一个名为TankScript,使用 USS 设置样式,然后将视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表
以及 UXML 中的绑定路径。

  1. 在您的项目窗口一个窗口,显示您的内容Assets文件夹(项目选项卡)更多信息
    术语表中查看
    ,创建一个名为create-a-binding-inspector以存储您的所有文件。

  2. 创建名为TankScript.cs并将其内容替换为以下内容:

    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);
        }
    }
    
  3. create-a-binding-inspector 文件夹中,创建一个名为Editor.

  4. Editor 文件夹中,创建一个名为tank_inspector_styles.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);
    }
    
  5. 创建一个名为tank_inspector_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>
    

创建具有绑定的 Inspector UI

创建 C# 脚本以注册自定义检查器TankScript.您无需调用Bind()方法,因为 Inspector 窗口中的绑定是隐式的。

  1. 创建名为TankEditor.cs并将其内容替换为以下内容:

    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;
        }
    }
    
  2. 在“项目”窗口中,选择TankEditor.cs.

  3. tank_inspector_uxml.uxml到检查器中的可视化树

  4. tank_inspector_styles.uss到检查器中的样式表

测试第一个绑定

  1. 在 Unity 中,将空游戏对象添加到场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
    请参阅术语表
    .
  2. 选择游戏对象并拖动TankScript.cs以在检查器中添加组件。这会在检查器中生成 Tank 脚本组件。
  3. Tank 脚本中,您可以在“坦克名称”框中更改坦克的名称,并在“坦克大小”框中更改“变换比例”值。

绑定为InspectorElement

创建一个自定义编辑器窗口,其中包含两个绑定到TankScript对象。创建一个调用InspectorElement构造 函数.这InspectorElement创建 UI 并自动将 UI 绑定到对象。

  1. 创建一个名为SimpleBindingExampleInspectorElement.cs并将其内容替换为以下内容:

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

测试第二个绑定

  1. 在 Unity 中,选择“窗口”>“UIToolkitExamples”>“简单绑定示例检查器元素”。
  2. 在“编辑器”窗口中,如果更改字段中的值,则检查器中的值也会更改,反之亦然。

其他资源

使用 UXML 和 C# 脚本绑定
绑定到嵌套属性