版本:Unity 6 (6000.0)
语言:English
使用运行时绑定绑定到多个属性
创建自定义绑定以绑定 USS 选择器

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

版本: 6000.0+

此示例演示如何创建类型转换器,以在数据源和UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 词汇表
之间转换数据类型。

示例概述

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

Runtime binding type converter example
运行时绑定类型转换器示例

您可以在此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,该 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一个 Unity 窗口,显示有关当前选定的 GameObject、资产或项目设置的信息,允许您检查和编辑值。 更多信息
    参见 词汇表
    面板中,右键单击Text字段,然后选择Add binding

  5. Add Binding窗口中,执行以下操作

    • Binding Mode列表中,选择To Target。当数据源更改时,这会更新 UI。
    • Advanced Settings > Local converters > 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 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 Viewport应用程序在屏幕上用户可见的区域。
参见 词汇表
中的Label的文本和背景颜色会根据Danger Level的值发生变化。

其他资源

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