控件是图形用户界面的元素,例如按钮、标签或复选框。它包括控件的视觉效果,以及对其进行操作及交互的脚本逻辑。
在 UI 工具包中,控件类似于预制件,将视觉元素和脚本结合到一个可在 UI 面板中使用的模板中。
控件可以由单个视觉元素或多个视觉元素的组合组成。
例如,上面显示的 Toggle
控件包含三个元素:
Toggle
控件的实现定义了该控件的行为。它具有代表切换状态的内部值:true 或 false。当值发生变化时,此逻辑会交替显示复选标记图像。
要在 UI 中使用控件,您需要将其添加到 UI 层级结构中,称为视觉树。您可以通过脚本、UXML 或在 UI Builder 中添加控件。
下面的代码片段展示了如何将 Button
控件添加到现有的视觉树中。
var newButton = new Button("Click me!");
rootVisualElement.Add(newButton);
向 UI 层级结构添加控件时,布局引擎会自动处理大小和定位。有关自动布局的更多信息,请参阅布局引擎。
您还可以手动覆盖视觉元素的大小和位置。要了解有关手动控制位置的更多信息,请参阅视觉树页面。
UI 工具包中的所有视觉元素都使用样式来定义其属性。您可以通过三种方式修改样式属性:
控件是交互式的,它代表了一个可以更改的值。例如,FloatField
代表一个浮点值。您可以使用代码对更改做出反应,例如:
如果控件表示可修改的值,则它包含一个 value
属性。脚本可以使用 value
属性直接访问控件的值。下面的代码片段创建了一个 Toggle
控件和一个 Button
控件。当您单击按钮时,该开关的值会翻转。
// 创建一个开关并注册回调
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
rootVisualElement.Add(m_MyToggle);
// 创建切换开关值的按钮
Button button01 = new Button() { text = "Toggle" };
button01.clicked += () =>
{
m_MyToggle.value = !m_MyToggle.value;
};
rootVisualElement.Add(button01);
要了解有关特定控件的属性的更多信息,请参阅 UI 工具包控件参考。
所有具有 value
属性的内置控件都会在值发生变化时发送一个事件。代码可以注册一个回调来接收这个事件。下面的代码片段展示了如何创建一个 Toggle
控件并注册一个回调:
// 创建一个开关并注册回调
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
m_MyToggle.RegisterValueChangedCallback((evt) => { Debug.Log("Change Event received"); });
rootVisualElement.Add(m_MyToggle);
要了解有关回调和事件的更多信息,请参阅事件处理。
控件可以直接绑定到对象或序列化属性。例如,一个FloatField
控件可绑定到属于某个 MonoBehaviour
的公共浮点变量。当控件绑定到该属性时,它会自动显示该属性的值。当用户修改该控件时,属性值会更新。
同样,当属性值通过代码更改时,UI 会显示更新后的值。这种双向连接在创建自定义 Inspector 时很有用。
要了解有关数据绑定的更多信息,请参阅绑定 页面。
并非所有控件都是可绑定的。要查看所有内置控件的列表以及它们是否支持绑定,请参阅 UI 工具包控件参考。
UI 工具包允许您创建自定义控件。这使得创建复杂控件或为用户界面元素实现自定义逻辑成为可能。
控件直接派生自 VisualElement
或 VisualElement
的子类,例如 TextElement
。它们还可能添加实现控件的行为的操控器。例如,Button
控件添加了一个Clickable
操控器。
Unity 包含大量标准控件,例如标签、文本字段和开关。某些控件仅在编辑器中可用。 有关 UI 工具包的内置控件的完整列表,请参阅 UI 工具包控件参考。