Appearance
Button - TextMeshPro

这是 UI → Button - TextMeshPro 创建的 TMP 按钮。
准确理解是:
c
Button - TextMeshPro 预制体
├── 根物体:Image + Button
└── 子物体:TextMeshProUGUI- 根物体的
Button:负责点击、状态切换、导航和On Click()。 - 根物体的
Image:负责按钮背景。 - 子物体的
TextMeshProUGUI:负责文字、字体、字号、对齐、颜色和自动换行。 Target Graphic = Button (Image):表示悬停、按下、禁用时改变的是背景 Image,不会自动改变 TMP 文字颜色。- 要修改按钮文字,需要选中子物体,在
TextMeshProUGUI组件中修改。
所以,TMP Button 的点击逻辑与普通 Button 基本相同,主要区别是文字组件从旧版 Text 换成了 TextMeshProUGUI。TextMeshPro 是 Unity UI Text 的替代方案,支持更丰富的字体和排版功能。官方文档
原来的 On Click()、Transition、Navigation 讲解仍然适用,官方 Button 文档也说明 On Click 是按钮完成点击并松开时触发的事件。Button 官方文档
这张图是 Unity UGUI 的 Button(按钮)组件。
当前配置
Interactable:开启,按钮可以交互。Transition:Color Tint,根据状态改变颜色。Target Graphic:Button (Image),颜色变化作用于按钮背景 Image。Normal Color:正常状态。Highlighted Color:鼠标悬停或导航选中。Pressed Color:按下状态。Selected Color:键盘或手柄选中。Disabled Color:不可交互状态。Color Multiplier:颜色乘数,当前为1。Fade Duration:状态过渡时间,当前为0.1秒。Navigation:Automatic,自动寻找键盘或手柄导航目标。On Click():当前为空,说明还没有绑定点击事件。- 底部
Default UI Material:UI 默认材质,不负责按钮点击逻辑。
Button 的工作原理
Button
├── Image 负责绘制按钮背景
├── Button 负责交互和点击事件
└── Text / TextMeshPro 负责显示文字Button 继承自 Selectable,所以拥有:
InteractableTransitionNavigation- Normal、Highlighted、Pressed、Disabled 等状态
Button 自己增加的核心功能是:
On Click()用户点击并松开鼠标时触发。如果松开前鼠标移出按钮区域,通常不会触发。
Transition 的其他模式
None:没有状态变化。Color Tint:切换颜色。Sprite Swap:不同状态切换不同 Sprite。Animation:使用 Animator 播放状态动画。
注意:Target Graphic 只影响指定的 Graphic。如果指向的是按钮背景 Image,通常只会改变背景,不会自动改变子物体 Text 或 TextMeshPro 的颜色。
绑定 On Click 事件
- 点击
On Click()下方的+。 - 把目标 GameObject 拖入事件框。
- 选择脚本中的
public void方法。 - 运行游戏测试。
代码绑定示例:
c
using UnityEngine;
using UnityEngine.UI;
public class ButtonDemo : MonoBehaviour
{
[SerializeField] private Button button;
private void Start()
{
button.onClick.AddListener(OnClicked);
}
public void OnClicked()
{
Debug.Log("按钮被点击");
}
private void OnDestroy()
{
button.onClick.RemoveListener(OnClicked);
}
}常见问题:
- 点击无反应:检查
Interactable、EventSystem、Graphic Raycaster。 - 被其他 Panel 或 Image 挡住:关闭遮挡物的
Raycast Target。 - 悬停颜色不变化:检查
Transition、Target Graphic和颜色设置。 - 文字颜色不变:Button 默认只改变 Target Graphic 的颜色。
- 点击执行两次:可能同时绑定了 Inspector 事件和代码事件。
List is Empty:表示还没有绑定事件,不是报错。
Button 与 Toggle 的区别
Button:每次点击执行一次On Click()。Toggle:保存Is On状态,并通过On Value Changed(bool)通知状态变化。