Version: 6000.3
语言: 中文
使用运行时绑定绑定到多个属性
创建自定义绑定以绑定 USS 选择器

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

版本: 6000.0+

此示例演示如何创建类型转换器以在数据源和 UI 之间转换数据类型。

示例概述

此示例在 UI Builder 中创建一个绑定到数据源资产的 Label 控件。数据源资产包含名为dangerLevel.标签显示dangerLevel作为字符串,并根据dangerLevel.

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

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

先决条件

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

创建数据源资产

创建包含要绑定到的属性的数据源资产。在此示例中,您将创建一个ScriptableObject名为ExampleConverterObject包含一个本地转换器,该转换器将float设置为Colorstring.

  1. 使用任何模板在 Unity 中创建项目。
  2. Assets文件夹中,创建一个名为ExampleConverterObject.cs内容如下:
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文件夹。
  2. 将资产重命名为ExampleConverterObject.asset.

创建UI

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

  1. Assets文件夹中,创建一个名为ExampleConverterObject.uxml.
  2. 双击ExampleConverterObject.uxml文件以在 UI Builder 中打开它。
  3. 在“层次结构”面板中,添加“标签”

将标签绑定到数据源

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

  1. 在“层次结构”面板中,选择“标签”

  2. “检查器”面板的“绑”>“数据源>对象”列表中,选择“ExampleConverterObject”。

  3. “数据源路径”列表中,选择“dangerLevel”。

  4. 检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    面板,右键单击“文本”字段,然后选择“添加绑定”。

  5. 在“添加绑定”窗口中,执行以下作:

    • 从“绑定模式”列表中,选择“到目标”。这会在数据源更改时更新 UI。
    • 从“高级设置”>“本地转换器”>“目标属性 (UI)”列表中,选择“值到进度”。这会将浮点数转换为字符串。设置标签文本的装订
  6. 选择“添加绑定”以应用更改。

  7. “检查器”面板中,展开“背景”字段。

  8. 右键单击“颜色”属性,然后选择“添加绑定”。

  9. 在“添加绑定”窗口中,执行以下作:

    • 从“绑定模式”列表中,选择“到目标”。这会在数据源更改时更新 UI。
    • “本地转换器>高级设置”>“目标属性 (UI)”列表中,选择“进度值”。这会将浮点转换为颜色。
  10. 选择“添加绑定”以应用更改。

  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>
    

测试绑定

在 Inspector 窗口中ExampleObject.asset中,移动“危险级别”滑块。UI Builder 中标签的文本和背景颜色视口用户在屏幕上应用的可见区域。
请参阅术语表
根据危险等级的值而变化。

其他资源

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