使用 Button 元素在 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
在 术语表 中查看 中创建可点击的按钮。例如,当用户点击 Button 元素时,会触发一个动作或事件,例如打开新窗口、提交表单或播放声音效果。
您可以使用 UI Builder、UXML 或 C# 创建 Button。以下 C# 示例创建了一个带有标签的 Button
var button = new Button(() => { Debug.Log("Button clicked"); }) { text = "Click me" };
您可以通过添加图标来增强 Button 的视觉效果,例如 Texture、Render Texture一种特殊的 Texture 类型,它在运行时创建和更新。要使用它们,首先创建一个新的 Render Texture,并指定您的摄像机之一渲染到其中。然后,您可以像使用普通 Texture 一样在材质中使用 Render Texture。 更多信息
在 术语表 中查看、Sprite二维图形对象。如果您习惯于使用 3D,则 Sprite 本质上只是标准纹理,但有一些特殊技术可以组合和管理精灵纹理,以提高开发过程中的效率和便利性。 更多信息
在 术语表 中查看 或项目中存在的矢量图像资产。有关如何引用图像资产的信息,请参阅 资产任何可用于游戏或项目的媒体或数据。资产可能来自在 Unity 之外创建的文件,例如 3D 模型、音频文件或图像。您也可以在 Unity 中创建某些资产类型,例如动画控制器、音频混合器或渲染纹理。 更多信息
在 术语表 中查看。
要使用 UI Builder 添加 Button 的图标
要使用 UXML 添加 Button 的图标,请将图像源提供给 icon-image
属性
<ui:Button name="Button" text="Button text" icon-image="/path/to/image-file.png" />
要使用 C# 添加 Button 的图标,请将图像源分配给 iconImage
属性
Button myButton = new Button();
var buttonIconImage = Resources.Load<Texture2D>("image-file");
myButton.text = "Button text";
myButton.iconImage = buttonIconImage;
当您向 Button 添加图标时,它会向 Button 添加两个 只读 子元素
您无法编辑子元素,但可以使用 Button 元素的 USS flex-direction
属性更改其布局。默认情况下,图标添加到按钮文本的左侧。
要重新定位按钮图标,请使用以下方法调整 Button 的 flex-direction
row-reverse
。column
。column-reverse
。Button 元素允许您使用 text
、iconImage
属性和 background-image
样式属性向用户提供更多信息。与任何 视觉元素视觉树的节点,它实例化或派生自 C# VisualElement
类。您可以设置外观、定义行为,并将其显示在屏幕上,作为 UI 的一部分。 更多信息
在 术语表 中查看 一样,您也可以在 Button 的层次结构中添加子元素,例如 Label 或 Image,以便向用户提供更多信息,如果您希望对这些元素的外观和行为进行更细粒度的控制。
通常,在以下情况下使用子元素
将属性用于以下目的
以下 UXML 示例创建了一个 Button
<UXML xmlns="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements">
<Button text="UXML Button" name="the-uxml-button" />
</UXML>
以下 C# 示例说明了 Button 的一些可自定义功能
/// <sample>
// Action to perform when button is pressed.
// Toggles the text on all buttons in 'container'.
Action action = () =>
{
container.Query<Button>().ForEach((button) =>
{
button.text = button.text.EndsWith("Button") ? "Button (Clicked)" : "Button";
});
};
// Get a reference to the Button from UXML and assign it its action.
var uxmlButton = container.Q<Button>("the-uxml-button");
uxmlButton.RegisterCallback<MouseUpEvent>((evt) => action());
// Create a new Button with an action and give it a style class.
var csharpButton = new Button(action) { text = "C# Button" };
csharpButton.AddToClassList("some-styled-button");
container.Add(csharpButton);
/// </sample>
要实时在 Unity 中尝试此示例,请转到 窗口 > UI 工具包 > 示例。
C# 类:Button
命名空间:UnityEngine.UIElements
基类:TextElement
此元素具有以下成员属性
名称 | 类型 | 描述 |
---|---|---|
icon-image |
对象 |
将代表 Button 元素中图标的 Texture、Sprite 或 VectorImage。 |
此元素从其基类继承以下属性
名称 | 类型 | 描述 |
---|---|---|
binding-path |
字符串 |
要绑定的目标属性的路径。 |
display-tooltip-when-elided |
布尔值 |
如果为 true,则工具提示显示省略文本的完整版本,并且如果之前已提供工具提示,则将被覆盖。 |
emoji-fallback-support |
布尔值 |
指定系统在渲染文本时查找 Emoji 字符的顺序。如果启用此设置,则系统将首先在全局 Emoji 备用列表中搜索 Unicode 14.0 标准中定义为 Emoji 的字符。 |
enable-rich-text |
布尔值 |
如果为 false,则不会解析富文本标签。 |
focusable |
布尔值 |
如果元素可获得焦点,则为 true。 |
parse-escape-sequences |
布尔值 |
指定是否按原样显示转义序列,或者是否将它们替换为它们代表的字符。 |
tabindex |
整数 |
用于在焦点环中对可获得焦点的元素进行排序的整数。必须大于或等于零。 |
text |
字符串 |
要显示的文本。 更改此值将隐式调用 INotifyValueChanged_1.value 设置器,这将引发类型为字符串的 ChangeEvent_1 。 |
此元素还从 VisualElement
继承以下属性
名称 | 类型 | 描述 |
---|---|---|
content-container |
字符串 |
子元素将被添加到其中,通常与元素本身相同。 |
data-source |
对象 |
将数据源分配给此 VisualElement,它将覆盖任何继承的数据源。此数据源将由所有子项继承。 |
data-source-path |
字符串 |
从数据源到值的路径。 |
data-source-type |
System.Type |
可分配给此 VisualElement 的数据源的可能类型。 此信息仅由 UI Builder 用作提示,以便在设计时无法指定有效数据源时,为数据源路径字段提供一些完成。 |
language-direction |
UIElements.LanguageDirection |
指示元素文本的方向性。该值将传播到元素的子项。 将 languageDirection 设置为 RTL 会添加对从右到左 (RTL) 的基本支持,方法是反转文本并适当地处理断行和自动换行。但是,它不提供全面的 RTL 支持,因为这将需要文本整形,包括字符重新排序和 OpenType 字体功能支持。全面的 RTL 支持计划在未来的更新中提供,这将涉及用于处理语言、脚本和字体功能规范的额外 API。 为了增强此属性的 RTL 功能,用户可以探索 Unity Asset Store 中可用的第三方插件,并使用 ITextElementExperimentalFeatures.renderedText |
name |
字符串 |
此 VisualElement 的名称。 使用此属性来编写针对特定元素的 USS 选择器。标准做法是为元素提供一个唯一的名称。 |
picking-mode |
UIElements.PickingMode |
确定此元素在 mouseEvents 或 IPanel.Pick 查询期间是否可拾取。 |
style |
字符串 |
设置 VisualElement 样式值。 |
tooltip |
字符串 |
在用户将鼠标悬停在元素上一段时间后,将在信息框内显示的文本。这仅在编辑器 UI 中受支持。 |
usage-hints |
UIElements.UsageHints |
指定 VisualElement 的高级预期使用模式的提示值组合。此属性只能在 VisualElement 尚未成为 Panel 的一部分时设置。一旦成为 Panel 的一部分,此属性实际上就变成只读的,尝试更改它将引发异常。正确 UsageHints 的规范促使系统根据预期的使用模式,更好地决定如何处理或加速某些操作。请注意,这些提示不会影响行为或视觉结果,而只会影响面板和内部元素的整体性能。建议始终考虑指定正确的 UsageHints ,但请记住,在某些情况下,某些 UsageHints 可能被内部忽略(例如,由于目标平台上的硬件限制)。 |
view-data-key |
字符串 |
用于视图数据持久性,例如树展开状态、滚动位置或缩放级别。 此键用于从视图数据存储中保存和加载视图数据。如果您没有设置此键,则相关联的 VisualElement 的持久性将被禁用。有关更多信息,请参阅 视图数据持久性。 |
下表列出了所有 C# 公共属性名称及其相关的 USS 选择器。
C# 属性 | USS 选择器 | 描述 |
---|---|---|
ussClassName |
.unity-button |
此类型元素的 USS 类名称。 Unity 会将此 USS 类添加到 Button 元素的每个实例。应用于此类的任何样式都会影响视觉树中样式表旁边或下面的每个按钮。 |
iconUssClassName |
.unity-button--with-icon |
带有图标的 Button 元素的 USS 类名称。 如果实例的 Button.iconImage 属性包含有效的纹理,Unity 会将此 USS 类添加到 Button 元素的实例中。应用于此类的任何样式都会影响视觉树中样式表旁边或下面的每个带有图标的按钮。 |
ussClassName |
.unity-text-element |
此类型元素的 USS 类名称。 |
selectableUssClassName |
.unity-text-element__selectable |
可选择文本元素的 USS 类名称。 |
disabledUssClassName |
.unity-disabled |
本地禁用元素的 USS 类名称。 |
您还可以使用 检查器或 UI 工具包调试器中的匹配选择器部分 查看哪些 USS 选择器会影响 VisualElement
各级层次结构中的组件。