控件是图形用户界面的元素,例如按钮、标签或复选框。它包括控件的视觉效果,以及对其进行操作及交互的脚本逻辑。
在 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 工具包控件参考。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.