Skip to content

Button - TextMeshPro

image-20260713110749560

Unity_UI_TextMeshPro_Button_Inspector_Expanded_Guide

这是 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()TransitionNavigation 讲解仍然适用,官方 Button 文档也说明 On Click 是按钮完成点击并松开时触发的事件。Button 官方文档

这张图是 Unity UGUI 的 Button(按钮)组件

当前配置

  • Interactable:开启,按钮可以交互。
  • TransitionColor Tint,根据状态改变颜色。
  • Target GraphicButton (Image),颜色变化作用于按钮背景 Image。
  • Normal Color:正常状态。
  • Highlighted Color:鼠标悬停或导航选中。
  • Pressed Color:按下状态。
  • Selected Color:键盘或手柄选中。
  • Disabled Color:不可交互状态。
  • Color Multiplier:颜色乘数,当前为 1
  • Fade Duration:状态过渡时间,当前为 0.1 秒。
  • NavigationAutomatic,自动寻找键盘或手柄导航目标。
  • On Click():当前为空,说明还没有绑定点击事件。
  • 底部 Default UI Material:UI 默认材质,不负责按钮点击逻辑。

Button 的工作原理

Button
├── Image                 负责绘制按钮背景
├── Button                 负责交互和点击事件
└── Text / TextMeshPro     负责显示文字

Button 继承自 Selectable,所以拥有:

  • Interactable
  • Transition
  • Navigation
  • Normal、Highlighted、Pressed、Disabled 等状态

Button 自己增加的核心功能是:

On Click()

用户点击并松开鼠标时触发。如果松开前鼠标移出按钮区域,通常不会触发。

Transition 的其他模式

  • None:没有状态变化。
  • Color Tint:切换颜色。
  • Sprite Swap:不同状态切换不同 Sprite。
  • Animation:使用 Animator 播放状态动画。

注意:Target Graphic 只影响指定的 Graphic。如果指向的是按钮背景 Image,通常只会改变背景,不会自动改变子物体 Text 或 TextMeshPro 的颜色。

绑定 On Click 事件

  1. 点击 On Click() 下方的 +
  2. 把目标 GameObject 拖入事件框。
  3. 选择脚本中的 public void 方法。
  4. 运行游戏测试。

代码绑定示例:

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);
    }
}

常见问题:

  • 点击无反应:检查 InteractableEventSystemGraphic Raycaster
  • 被其他 Panel 或 Image 挡住:关闭遮挡物的 Raycast Target
  • 悬停颜色不变化:检查 TransitionTarget Graphic 和颜色设置。
  • 文字颜色不变:Button 默认只改变 Target Graphic 的颜色。
  • 点击执行两次:可能同时绑定了 Inspector 事件和代码事件。
  • List is Empty:表示还没有绑定事件,不是报错。

Button 与 Toggle 的区别

  • Button:每次点击执行一次 On Click()
  • Toggle:保存 Is On 状态,并通过 On Value Changed(bool) 通知状态变化。

参考:Button 官方文档Selectable 过渡选项

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0