版本:6000.0+
此示例演示了如何创建类型转换器以在数据源和__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary 之间转换数据类型。
此示例在 UI Builder 中创建了一个绑定到数据源资源的标签控件。数据源资源包含名为 dangerLevel 的浮点属性。标签将 dangerLevel 显示为字符串,并根据 dangerLevel 的值更改其背景颜色。
您可以在此 GitHub 代码仓库中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发者。在开始之前,请熟悉以下内容:
创建一个包含要绑定的属性的数据源资源。在此示例中,您将创建一个名为 ExampleConverterObject 的 ScriptableObject 资源,其中包含用于将 float 转换为 Color 和 string 的本地转换器。
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;
}
Assets 文件夹中创建一个数据源资源。ExampleConverterObject.asset。创建一个 UI 并将它绑定到上一步中创建的数据源资产。在此示例中,您将创建包含标签控件的 UXML 文件。
Assets 文件夹中,创建一个名为 ExampleConverterObject.uxml 的 UXML 文件。ExampleConverterObject.uxml 文件可在 UI Builder 中打开该文件。将标签的属性绑定到数据源资源的属性,并为标签应用类型转换器。
在层级视图 (Hierarchy) 面板中,选择标签 (Label)。
在检视 (Inspector) 面板的绑定 (Bindings) > 数据源 (Data Source) > 对象 (Object) 列表中,选择 ExampleConverterObject。
从数据原路径 (Data Source Path) 列表中选择 dangerLevel。
在检视 (Inspector) 面板中,右键点击** Text** 字段并选择添加绑定 (Add binding)。
在添加绑定 (Add binding) 窗口中,执行以下操作:
选择添加绑定 (Add binding) 以应用所做的更改。
在检视面板 (Inspector) 面板中,展开 Background 字段。
右键点击 Color 属性并选择添加绑定 (Add binding)。
在添加绑定 (Add binding) 窗口中,执行以下操作:
选择添加绑定 (Add binding) 以应用所做的更改。
保存并关闭 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) 的值而变化。