版本: 6000.0+
此示例演示如何创建类型转换器,以在数据源和UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 词汇表之间转换数据类型。
此示例在 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,该 UI 绑定到您在上一步中创建的数据源资产。在此示例中,您将创建一个包含标签控件的 UXML 文件。
Assets
文件夹中,创建一个名为ExampleConverterObject.uxml
的 UXML 文件。ExampleConverterObject.uxml
文件,在 UI Builder 中打开它。将标签的属性绑定到数据源资产的属性,并为标签应用类型转换器。
在Hierarchy面板中,选择Label。
在Inspector面板中,从Bindings > Data Source > Object列表中,选择ExampleConverterObject。
从Data Source Path列表中,选择dangerLevel。
在Inspector一个 Unity 窗口,显示有关当前选定的 GameObject、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 词汇表面板中,右键单击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 Viewport应用程序在屏幕上用户可见的区域。
参见 词汇表中的Label的文本和背景颜色会根据Danger Level的值发生变化。