版本:Unity 6 (6000.0)
语言:English
绑定到嵌套属性
当绑定属性更改时接收回调

绑定到 UXML 模板

版本: 2021.3+

此示例演示如何使用 UXML 模板设置绑定路径。

示例概述

此示例创建了一个资源菜单项。该菜单创建一个GameSwitch资源,其中包含三个模板实例,这些实例绑定到GameSwitch对象的属性。

A preview of the GameSwitch Inspector
GameSwitch 检查器的预览

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

先决条件

本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三个 UI 系统。 更多信息
参见词汇表
工具包和 C# 脚本的开发者。在开始之前,请熟悉以下内容

  • UI 构建器
  • 视觉树一个由轻量级节点组成的对象图,它保存窗口或面板中的所有元素。它定义了您使用 UI 工具包构建的每个 UI。
    参见词汇表
  • UXML
  • USS

创建 GameSwitch 资源

创建脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见词汇表
以定义GameSwitch结构体和一个自定义资源以保存GameSwitch结构体的属性。

  1. 在 Unity 中使用任何模板创建一个项目。

  2. 在您的项目窗口一个显示您的Assets文件夹内容(项目选项卡)的窗口 更多信息
    参见词汇表
    中,创建一个名为bind-uxml-template的文件夹以存储所有文件。

  3. 创建一个名为GameSwitch.cs的 C# 脚本,并将其内容替换为以下内容

    using System;
    
    [Serializable]
    public struct GameSwitch
    {
        public string name;
        public bool enabled;
    }
    
  4. 创建一个名为GameSwitchesAsset.cs的 C# 脚本,并将其内容替换为以下内容

    using UnityEngine;
    
    [CreateAssetMenu(menuName = "UIToolkitExamples/GameSwitches")]
    public class GameSwitchesAsset : ScriptableObject
    {
        public GameSwitch useLocalServer;
        public GameSwitch showDebugMenu;
        public GameSwitch showFPSCounter;
    
        // Use the Reset function to provide default values
        public void Reset()
        {
            useLocalServer = new GameSwitch() { name = "Use Local Server", enabled = false };
            showDebugMenu = new GameSwitch() { name = "Show Debug Menu", enabled = false };
            showFPSCounter = new GameSwitch() { name = "Show FPS Counter", enabled = true };
        }
    }
    

创建 UXML 模板和文件

创建一个 UXML 模板,您可以将其用于每个GameSwitch结构体实例,以及一个使用该模板的 UXML 文件。

  1. 创建一个名为game_switch.uxml的 UI 文档,并将其内容替换为以下内容

    <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
        <Box style="flex-direction: row;">
            <Toggle binding-path="enabled" />
            <TextField binding-path="name" readonly="true" style="flex-grow: 1;"/>
        </Box>
    </UXML>
    
  2. 在**bind-uxml-template**文件夹中,创建一个名为Editor的文件夹。

  3. 在**Editor**文件夹中,创建一个名为game_switches_editor.uxml的 UI 文档,并将其内容替换为以下内容

    <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
        <Template name="switch" src="../game_switch.uxml"/>
        <Instance template="switch" binding-path="useLocalServer" />
        <Instance template="switch" binding-path="showDebugMenu" />
        <Instance template="switch" binding-path="showFPSCounter" />
    </UXML>
    

    注意:这是自定义编辑器的主要 UXML 文件。每个属性都通过Instancebinding-path属性绑定到game_switch.uxml的一个实例。

创建资源菜单和资源

创建一个脚本以注册GameSwitchesAsset的自定义编辑器。

  1. 创建一个名为GameSwitchesEditor.cs的 C# 脚本,并将其内容替换为以下内容

    using UnityEditor;
    using UnityEngine;
    using UnityEngine.UIElements;
    
    namespace UIToolkitExamples
    {
        [CustomEditor(typeof(GameSwitchesAsset))]
        public class GameSwitchesEditor : Editor
        {
            [SerializeField]
            VisualTreeAsset visualTreeAsset;
    
            public override VisualElement CreateInspectorGUI()
            {
                return visualTreeAsset.CloneTree();
            }
        }
    }
    
  2. GameSwitchesEditor.cs检查器一个 Unity 窗口,显示有关当前选定的 GameObject、资源或项目设置的信息,允许您检查和编辑值。 更多信息
    参见词汇表
    窗口中,将game_switches_editor.uxml文件分配给**视觉树资源**字段。

测试绑定

  1. 在 Unity 中,选择**资源**>**创建**>**UIToolkitExamples**>**GameSwitches**以在项目的Assets文件夹中创建一个新资源。
  2. 选择新创建的资源。检查器显示切换按钮和文本字段,这些按钮和字段绑定到GameSwitchesAsset.useLocalServerGameSwitchesAsset.showDebugMenuGameSwitchesAsset.showFPSCounter属性。

其他资源

绑定到嵌套属性
当绑定属性更改时接收回调