包含此页的版本:
不含此页的版本:
版本: 6000.0+
此示例演示如何创建类型转换器以在数据源和 UI 之间转换数据类型。
此示例在 UI Builder 中创建一个绑定到数据源资产的 Label 控件。数据源资产包含名为dangerLevel.标签显示dangerLevel作为字符串,并根据dangerLevel.
您可以在此 GitHub 存储库中找到此示例创建的已完成文件。
本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容:
创建包含要绑定到的属性的数据源资产。在此示例中,您将创建一个ScriptableObject名为ExampleConverterObject包含一个本地转换器,该转换器将float设置为Color和string.
Assets文件夹中,创建一个名为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;
}
Assets文件夹。ExampleConverterObject.asset.创建一个 UI,该 UI 绑定到您在上一步中创建的数据源资产。在此示例中,你将创建一个包含 Label 控件的 UXML 文件。
Assets文件夹中,创建一个名为ExampleConverterObject.uxml.ExampleConverterObject.uxml文件以在 UI Builder 中打开它。将 Label 的属性绑定到数据源资产的属性,并应用 Label 的类型转换器。
在“层次结构”面板中,选择“标签”。
在“检查器”面板的“绑定”>“数据源>对象”列表中,选择“ExampleConverterObject”。
从“数据源路径”列表中,选择“dangerLevel”。
在检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表面板,右键单击“文本”字段,然后选择“添加绑定”。
在“添加绑定”窗口中,执行以下作:
选择“添加绑定”以应用更改。
在“检查器”面板中,展开“背景”字段。
右键单击“颜色”属性,然后选择“添加绑定”。
在“添加绑定”窗口中,执行以下作:
选择“添加绑定”以应用更改。
保存并关闭 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>
在 Inspector 窗口中ExampleObject.asset中,移动“危险级别”滑块。UI Builder 中标签的文本和背景颜色视口用户在屏幕上应用的可见区域。
请参阅术语表根据危险等级的值而变化。