Version: 6000.3
语言: 中文
色域

按钮

使用 Button 元素在 UI 中创建可点击的按钮。例如,当用户单击或点击 Button 元素时,它会触发作或事件,例如打开新窗口、提交表单或播放音效。

创建按钮

你可以使用 UI 生成器、UXML 或 C# 创建 Button。以下 C# 示例创建带有标签的 Button:

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

向按钮添加图标

您可以通过合并图标(例如纹理、渲染纹理(Render Texture)一种特殊类型的纹理,在运行时创建和更新。要使用它们,请先创建一个新的渲染纹理,并指定要渲染到其中的摄像机之一。然后,你可以在材质中使用渲染纹理,就像使用常规纹理一样。更多信息
请参阅术语表
,精灵A 2D 图形对象。如果您习惯在 3D 中工作,精灵本质上只是标准纹理,但有一些特殊技术可以组合和管理精灵纹理,以提高开发过程中的效率和便利性。更多信息
请参阅术语表
或项目中存在的矢量图像资产。有关如何引用图像资产的信息,请参阅资产可在游戏或项目中使用的任何媒体或数据。资产可能来自在 Unity 外部创建的文件,例如 3D 模型、音频文件或图像。您还可以在 Unity 中创建某些资产类型,例如 Animator 控制器、混音器或渲染纹理。更多信息
请参阅术语表
.

要使用 UI Builder 为按钮添加图标:

  • 从 Button 的检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    选项卡,从图标图像下拉列表中选择所需的图标。
  • 或者,将图标从“资源”窗口拖动到“按钮”的“检查器”选项卡中的“图标图像”字段。

要使用 UXML 为按钮添加图标,请将图像源提供给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 添加两个只读子元素:

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

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

要重新定位按钮图标,请调整按钮的flex-direction替换为以下内容:

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

使用按钮的子元素

Button 元素允许您通过text,iconImage属性,以及background-imagestyle 属性。与任何视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表
,如果您想更精细地控制这些元素的外观和行为,您还可以在 Button 的层次结构中添加子元素,例如 Label 或 Image,以便向用户提供其他信息。

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

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

将属性用于以下目的:

  • 简单的设计:如果按钮的设计简单且不需要自定义或动态内容,则建议使用属性。
  • 性能:如果界面中有许多按钮,则为每个按钮使用子元素可能会对性能产生负面影响。在这种情况下,使用属性来设置按钮的外观会更有效。
  • 一致性:如果要保持整个 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 中实时试用此示例,请转到 Window > UI 工具包>示例

C# 基类和命名空间

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

成员 UXML 属性

此元素具有以下成员属性:

名字 类型 描述
icon-image Object 纹理、精灵或矢量图像,将表示 Button 元素中的图标。
text string 发短信

继承的UXML属性

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

名字 类型 描述
binding-path string 要绑定的目标属性的路径。
display-tooltip-when-elided boolean 如果为 true,则工具提示显示省略文本的完整版本,并且如果之前提供了工具提示,则该工具提示将被覆盖。
double-click-selects-word boolean 控制是否双击选择鼠标指针下的单词。
emoji-fallback-support boolean 指定系统在呈现文本时查找表情符号字符的顺序。如果启用此设置,则将首先在全局表情符号回退列表中搜索在 Unicode 14.0 标准中定义为表情符号的字符。
enable-rich-text boolean 如果为 false,则不会解析富文本标记。
focusable boolean 如果为 false,则阻止对元素进行聚焦。

仅当元素的 canGrabFocus 属性为 true 时,才能对元素进行聚焦。
parse-escape-sequences boolean 确定转义序列的显示方式。当设置为true、转义序列(例如\n,\t)被解析并转换为其相应的字符。例如,'\n' 将插入一行新行。当设置为false,转义序列显示为原始文本(例如,\n显示为字符 '' 后跟 'n')。
selectable boolean 如果字段可选择,则返回 true。
tabindex int 用于对焦点环中的可聚焦元素进行排序的整数。必须大于或等于零。

tabIndex值小于0(例如,−1) 从焦点环和选项卡导航中删除元素。
text string 要显示的文本。

更改此值将隐式调用
INotifyValueChanged_1.valuesetter,它将引发一个ChangeEvent_1字符串类型。
triple-click-selects-line boolean 控制三次单击是否选择鼠标指针下的整行。

此元素还继承了以下属性VisualElement:

名字 类型 描述
content-container string 添加子元素的逻辑容器。如果将子元素添加到此元素,则将子元素添加到该元素的内容容器中。

当迭代
VisualElement.Children元素的元素,则使用元素的内容容器层次结构而不是元素本身。这可能会导致意外结果,例如,如果元素不直接位于内容容器的层次结构中,则导航事件会忽略元素。 指IFocusRing了解更多信息。

如果内容容器与元素本身相同,则子元素将直接添加到元素中。对于大多数元素来说都是如此,但可以被更复杂的类型覆盖。

ScrollView例如,具有与自身不同的内容容器。在这种情况下,添加到滚动视图的子元素将改为添加到其内容容器元素中。而物理父元素 (VisualElement.Hierarchy.parent) 是滚动视图的内容容器元素,它们的逻辑父元素 (VisualElement.parent)仍然引用滚动视图本身。由于滚动视图的一些可聚焦子项不是其逻辑层次结构的一部分,例如其Scroller元素,默认情况下,在使用顺序导航时,不会考虑这些可聚焦的子项。如果默认导航规则与您的需求不符,请参阅如何更改接下来关注的元素,了解解决方法的示例。
data-source Object 将数据源分配给此 VisualElement,该 VisualElement 将替代任何继承的数据源。此数据源由所有子级继承。
data-source-path string 从数据源到值的路径。
data-source-type System.Type 可分配给此 VisualElement 的可能数据源类型。
当设计时无法指定有效数据源时,UI 生成器仅将
此信息用作提示,以对数据源路径字段进行一些补全。
enabled boolean 如果VisualElement在本地启用。
如果 VisualElement 的父级之一隐式禁用,则
不会更改此标志。要验证这一点,请使用
enabledInHierarchy.
language-direction UIElements.LanguageDirection 指示元素文本的方向性。该值将传播到元素的子项。

设置
languageDirectionRTL只能获得文本反转等基本的 RTL 支持。要获得更全面的 RTL 支持,例如换行、自动换行或文本整形,您必须启用高级文本生成器
name string 此 VisualElement 的名称。

使用此属性可以编写面向特定元素的 USS 选择器。标准做法是为元素指定一个唯一的名称。
picking-mode UIElements.PickingMode 确定此元素是可以作为指针事件的目标还是由IPanel.Pick查询。

如果出现以下情况,则无法拾取元素:

- 它们不可见- 它们的
style.display设置为DisplayStyle.None

拾取模式为PickingMode.Ignore永远不要接收悬停伪状态。
style string VisualElement.
返回
的样式数据是根据 USS 文件或在 C# 中写入此对象的内联样式计算得出的,不表示完全解析的样式,例如 VisualElement 的最终高度和宽度。要访问这些完全解析的样式,请使用
resolvedStyle.



有关如何使用此属性和所有受支持的 USS 属性的信息,请参阅在 C# 脚本中应用样式USS 属性参考手册页。
tooltip string 用户将鼠标悬停在元素上一小段时间后,要在信息框内显示的文本。这仅在编辑器UI中受支持。
usage-hints UIElements.UsageHints 提示值的组合,用于指定VisualElement.只有当VisualElement还不是Panel.曾经是Panel,则此属性实际上变为只读,尝试更改它将引发异常。适当的规范UsageHints驱动系统根据预期的使用模式就如何处理或加速某些作做出更好的决策。请注意,这些提示不会影响行为或视觉结果,而只会影响面板和其中元素的整体性能。建议始终考虑指定适当的UsageHints,但请记住,某些UsageHints在某些情况下(例如,由于目标平台上的硬件限制),可能会在内部忽略。
view-data-key string 用于视图数据持久性,例如树展开状态、滚动位置或缩放级别。

此键用于从视图数据存储中保存和加载视图数据。如果未设置此键,则会禁用关联的持久性
VisualElement.有关更多信息,请参阅 Unity 手册中的查看数据持久性

USS 级

下表列出了所有 C# 公共属性名称及其相关的 USS 选择器。

C# 属性 USS 选择器 描述
ussClassName .unity-button 此类元素的 USS 级名称。

Unity 将此 USS 类添加到 Button 元素的每个实例中。应用于此类的任何样式都会影响位于可视化树中样式表旁边或下方的每个按钮。
iconUssClassName .unity-button--with-icon 带有图标的 Button 元素的 USS 类名称。

Unity 会将此 USS 类添加到 Button 元素的实例中,如果该实例的
Button.iconImage属性包含有效的纹理。应用于此类的任何样式都会影响可视化树中样式表旁边或下方的每个带有图标的按钮。
iconOnlyUssClassName .unity-button--with-icon-only Button 元素的 USS 类名称,仅带有图标,没有文本。

Unity 会将此 USS 类添加到 Button 元素的实例中,如果该实例的
Button.iconImage属性包含有效的纹理,并且未设置任何文本。应用于此类的任何样式都会影响可视化树中样式表旁边或下方的每个带有图标的按钮。
ussClassName .unity-text-element 此类元素的 USS 级名称。
selectableUssClassName .unity-text-element__selectable 可选文本元素的 USS 类名称。
disabledUssClassName .unity-disabled 本地禁用元素的 USS 级名称。

您还可以使用 Inspector 或 UI Toolkit Debugger 中的 Matching Selectors 部分来查看哪些 USS 选择器会影响VisualElement在其层次结构的各个层面。

其他资源

色域