Version: Unity 6.0 (6000.0)
语言 : 中文
使用运行时绑定来绑定多个属性
创建自定义绑定以绑定 USS 选择器

使用类型转换器创建运行时绑定

版本:6000.0+

此示例演示了如何创建类型转换器以在数据源和__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
之间转换数据类型。

示例概述

此示例在 UI Builder 中创建了一个绑定到数据源资源的标签控件。数据源资源包含名为 dangerLevel 的浮点属性。标签将 dangerLevel 显示为字符串,并根据 dangerLevel 的值更改其背景颜色。

运行时绑定类型转换器示例
运行时绑定类型转换器示例

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

先决条件

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

创建数据源资源

创建一个包含要绑定的属性的数据源资源。在此示例中,您将创建一个名为 ExampleConverterObjectScriptableObject 资源,其中包含用于将 float 转换为 Colorstring 的本地转换器。

  1. 使用任何模板在 Unity 中创建项目。
  2. 在您的项目的 Assets 文件夹中,创建一个名称为 ExampleConverterObject.cs 并包含以下内容的 C# 脚本:
using Unity.Properties;
using UnityEngine;
using UnityEngine.UIElements;

#if UNITY_EDITOR
using UnityEditor;
#endif

[CreateAssetMenu]
public class ExampleConverterObject : ScriptableObject
{
#if UNITY_EDITOR
    [InitializeOnLoadMethod]
#else
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
#endif
    public static void RegisterConverters()
    {
    
        // Create local Converters.
        var group = new ConverterGroup("Value To Progress");
    
        // Converter groups can have multiple converters. This example converts a float to both a color and a string.
        group.AddConverter((ref float v) => new StyleColor(Color.Lerp(Color.red, Color.green, v)));
        group.AddConverter((ref float value) =>
        {
            return value switch
            {
                >= 0 and < 1.0f/3.0f => "Danger",
                >= 1.0f/3.0f and < 2.0f/3.0f => "Neutral",
                _ => "Good"
            };
        });
    
        // Register the converter group in InitializeOnLoadMethod to make it accessible from the UI Builder.
        ConverterGroups.RegisterConverterGroup(group);
    }
    
    [Header("Binding using a converter group")]
    [Range(0, 1)] public float dangerLevel;
}

创建示例对象资源

  1. 选择资源 (Assets) > 创建 (Create) > 示例对象 (Example Object)。这会在项目的 Assets 文件夹中创建一个数据源资源。
  2. 将资源重命名为 ExampleConverterObject.asset

创建 UI

创建一个 UI 并将它绑定到上一步中创建的数据源资产。在此示例中,您将创建包含标签控件的 UXML 文件。

  1. 在项目的 Assets 文件夹中,创建一个名为 ExampleConverterObject.uxml 的 UXML 文件。
  2. 双击 ExampleConverterObject.uxml 文件可在 UI Builder 中打开该文件。
  3. 层级面板 (Hierarchy) 面板中,添加一个标签 (Label)

将标签绑定到数据源

将标签的属性绑定到数据源资源的属性,并为标签应用类型转换器。

  1. 层级视图 (Hierarchy) 面板中,选择标签 (Label)

  2. 检视 (Inspector) 面板的绑定 (Bindings) > 数据源 (Data Source) > 对象 (Object) 列表中,选择 ExampleConverterObject

  3. 数据原路径 (Data Source Path) 列表中选择 dangerLevel

  4. 检视 (Inspector) 面板中,右键点击** Text** 字段并选择添加绑定 (Add binding)

  5. 添加绑定 (Add binding) 窗口中,执行以下操作:

    • 绑定模式 (Binding Mode) 列表中选择至目标 (To Target)。这会在数据源发生更改时更新 UI。
    • 高级设置 (Advanced Settings) > 本地转换器 (Local converters) > To target 属性 (UI) (To target property (UI)) 列表中选择 Value To Progress。这会将浮点数转换为字符串。设置标签文本的绑定
  6. 选择添加绑定 (Add binding) 以应用所做的更改。

  7. 检视面板 (Inspector) 面板中,展开 Background 字段。

  8. 右键点击 Color 属性并选择添加绑定 (Add binding)

  9. 添加绑定 (Add binding) 窗口中,执行以下操作:

    • 绑定模式 (Binding Mode) 列表中选择至目标 (To Target)。这会在数据源发生更改时更新 UI。
    • 高级设置 (Advanced Settings) > 本地转换器 (Local converters) > To target 属性 (UI) (To target property (UI)) 列表中选择 Value To Progress。这会将浮点数转换为颜色。
  10. 选择添加绑定 (Add binding) 以应用所做的更改。

  11. 保存并关闭 UI Builder。您的 ExampleConverterObject.uxml 文件如下所示:

    <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" 
    engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
        <ui:Label text="Label" data-source="ExampleConverterObject.asset" data-source-path="dangerLevel">
            <Bindings>
                <ui:DataBinding property="style.backgroundColor" binding-mode="ToTarget" source-to-ui-converters="Value To Progress" />
                <ui:DataBinding property="text" binding-mode="ToTarget" source-to-ui-converters="Value To Progress" />
            </Bindings>
        </ui:Label>
    </ui:UXML>
    

测试绑定

ExampleObject.asset 的检视面板 (Inspector) 窗口中,移动危险级别 (Danger Level) 滑动条。UI Builder 视口中标签的文本和背景颜色根据危险级别 (Danger Level) 的值而变化。

其他资源

使用运行时绑定来绑定多个属性
创建自定义绑定以绑定 USS 选择器