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

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

版本 :6000.0+

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

示例概述

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

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

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

先决条件

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

创建数据源资产

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

  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选择器