Version: 1.5
语言 : 中文
通过运行时绑定与多个属性结合
创建自定义绑定以绑定USS选择器

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

版本 :6000.0+

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

示例概述

此示例将在UI构建器中创建一个与数据源资产结合的标签控件。数据源资产包含一个名为的浮点属性dangerLevel。标签显示dangerLevel作为字符串并根据dangerLevel。

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

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

先决条件

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

创建数据源资产

创建一个数据源资产,其中包含您要绑定到的属性。在此示例中,您创建一个ScriptableObject资产命名ExampleConverterObject其中包含一个局部转换器,该转换器转换float到Color和string。

  1. 在 Unity 中使用任何模板创建项目。
  2. 在Assets项目的文件夹,创建一个C#脚本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 > Create > Example Object。这将在Assets您项目的文件夹。
  2. 将资产重命名为ExampleConverterObject.asset。

创建UI

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

  1. 在Assets项目的文件夹,创建一个名为uxml文件ExampleConverterObject.uxml。
  2. 双击ExampleConverterObject.uxml文件以在UI构建器中打开。
  3. 在 Hierarchy 面板,添加一个Label 。

将标签绑定到数据源

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

  1. 在Hierarchy 面板,选择Label 。

  2. 在Inspector 面板,来自 Bindings > Data Source > Object 列表,选择 extpleconverterObject 。

  3. 来自 Data Source Path 列表,选择dangerLevel 。

  4. 在 Inspector面板,右键单击Text字段和选择Add binding 。

  5. 在 Add Binding 窗口,请执行以下操作:
    • 来自Binding Mode 列表,选择To Target 。当数据源更改时,这将更新UI。
    • 来自 Advanced Settings > Local converters > To target property (UI) 列表,选择 Value To Progress 。这将浮子转换为字符串。 Set the binding for the label text
  6. 选择 Add Binding 应用您的更改。

  7. 在 Inspector 面板,扩展 Background 字段。

  8. 右键单击 Color 属性并选择 Add binding 。

  9. 在 Add binding 窗口,请执行以下操作:
    • 来自 Binding Mode 列表,选择 To Target 。当数据源更改时,这将更新UI。
    • 来自 Advanced Settings > Local Converters > To target property (UI) 列表,选择 Value To Progress 。这将浮子转换为颜色。
  10. 选择 Add binding 应用您的更改。

  11. 保存并关闭UI构建器。你的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,移动 Danger Level 滑块。UI Builder 中 Label 的文本和背景颜色 Viewport 根据 Danger Level 的值而变化。

其他资源

通过运行时绑定与多个属性结合
创建自定义绑定以绑定USS选择器