版本:Unity 6 (6000.0)
语言:英语
UXML 元素 Box
UXML 元素 ColorField

UXML 元素 Button

使用 Button 元素在 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
术语表 中查看
中创建可点击的按钮。例如,当用户点击 Button 元素时,会触发一个动作或事件,例如打开新窗口、提交表单或播放声音效果。

创建 Button

您可以使用 UI Builder、UXML 或 C# 创建 Button。以下 C# 示例创建了一个带有标签的 Button

var button = new Button(() => { Debug.Log("Button clicked"); }) { text = "Click me" };

向 Button 添加图标

您可以通过添加图标来增强 Button 的视觉效果,例如 Texture、Render Texture一种特殊的 Texture 类型,它在运行时创建和更新。要使用它们,首先创建一个新的 Render Texture,并指定您的摄像机之一渲染到其中。然后,您可以像使用普通 Texture 一样在材质中使用 Render Texture。 更多信息
术语表 中查看
Sprite二维图形对象。如果您习惯于使用 3D,则 Sprite 本质上只是标准纹理,但有一些特殊技术可以组合和管理精灵纹理,以提高开发过程中的效率和便利性。 更多信息
术语表 中查看
或项目中存在的矢量图像资产。有关如何引用图像资产的信息,请参阅 资产任何可用于游戏或项目的媒体或数据。资产可能来自在 Unity 之外创建的文件,例如 3D 模型、音频文件或图像。您也可以在 Unity 中创建某些资产类型,例如动画控制器、音频混合器或渲染纹理。 更多信息
术语表 中查看

要使用 UI Builder 添加 Button 的图标

  • 在 Button 的 InspectorUnity 窗口,显示有关当前选定 GameObject、资产或项目设置的信息,允许您检查和编辑值。 更多信息
    术语表 中查看
    选项卡中,从 Icon Image 下拉列表中选择所需的图标。
  • 或者,将图标从 Assets 窗口拖放到 Button 的 Inspector 选项卡中的 Icon Image 字段。

要使用 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 添加两个 只读 子元素

  • 一个 Image 元素用于定义图标图像。
  • 一个 TextElement 元素用于定义按钮文本。

您无法编辑子元素,但可以使用 Button 元素的 USS flex-direction 属性更改其布局。默认情况下,图标添加到按钮文本的左侧。

要重新定位按钮图标,请使用以下方法调整 Button 的 flex-direction

  • 要将图标移到按钮文本的右侧,请将其设置为 row-reverse
  • 要将图标移到按钮文本的上方,请将其设置为 column
  • 要将图标放置在按钮文本下方,请将其设置为 column-reverse

使用 Button 的子元素

Button 元素允许您使用 texticonImage 属性和 background-image 样式属性向用户提供更多信息。与任何 视觉元素视觉树的节点,它实例化或派生自 C# VisualElement 类。您可以设置外观、定义行为,并将其显示在屏幕上,作为 UI 的一部分。 更多信息
术语表 中查看
一样,您也可以在 Button 的层次结构中添加子元素,例如 Label 或 Image,以便向用户提供更多信息,如果您希望对这些元素的外观和行为进行更细粒度的控制。

通常,在以下情况下使用子元素

  • 自定义:使用子元素允许您分别自定义每个元素的外观和行为。例如,您可能希望对标签文本使用自定义字体或颜色,或向图像添加特定动画。当您向 Button 添加 Image 元素时,可以从您的 场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置您的环境、障碍物和装饰,本质上是按部分设计和构建您的游戏。 更多信息
    术语表 中查看
    中直接添加该元素。此外,Image 元素还支持缩放模式和重复模式。
  • 动态内容:如果标签或图像的内容是动态的,使用子元素允许您分别更新每个元素的内容,而不会影响按钮的其他属性。
  • 交互:如果您希望向按钮中的特定元素添加交互性,例如允许用户仅单击标签(忽略对按钮其他元素的点击)以触发操作,使用子元素就可以实现这一点。

将属性用于以下目的

  • 简单设计:如果按钮的设计很简单,不需要自定义或动态内容,建议使用属性。
  • 性能:如果您的 UI 中有许多按钮,对每个按钮使用子元素可能会对性能产生负面影响。在这种情况下,使用属性来设置按钮的外观效率更高。
  • 一致性:如果您希望在整个 UI 中保持一致性,使用属性可以确保所有按钮具有相同的外观和行为。

示例

以下 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# 基类和命名空间

C# 类Button
命名空间UnityEngine.UIElements
基类TextElement

成员 UXML 属性

此元素具有以下成员属性

名称 类型 描述
icon-image 对象 将代表 Button 元素中图标的 Texture、Sprite 或 VectorImage。

继承的 UXML 属性

此元素从其基类继承以下属性

名称 类型 描述
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 的持久性将被禁用。有关更多信息,请参阅 视图数据持久性

USS 类

下表列出了所有 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 各级层次结构中的组件。

其他资源

UXML 元素 Box
UXML 元素 ColorField