HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 34 课
MODULE 4 · UI 界面 · 动画 · 特效

第 34 课 · Button 按钮

⏱ 预计时长 30 分钟📊 难度 入门📚 模块 第 4 部分 · UI 界面 · 动画 · 特效

🎯 本课学习目标

按钮是 UI 交互的核心。本课做各种按钮:普通、切换、图片按钮,并处理点击事件。

📖 详细教学步骤

创建按钮并改文字实操

  1. 添加 Button 节点
  2. 检查器 Text 输入按钮文字(如「开始游戏」)
  3. 调整 Size 让按钮大小合适

💡 常用快捷键:双击按钮可快速编辑文字。

处理点击:连接 pressed 信号代码

按钮点击(松开时)触发 pressed 信号:

GDSCRIPTextends CanvasLayer

@onready var btn: Button = $StartButton

func _ready():
    btn.pressed.connect(_on_start_pressed)

func _on_start_pressed():
    print("开始游戏!")

按钮其他信号概念

信号触发时机
pressed点击松开时(最常用)
button_down按下瞬间
button_up松开瞬间
mouse_entered鼠标移入
mouse_exited鼠标移出
toggled切换按钮状态改变时

按钮类型与属性属性

  • Disabled:禁用(灰色不可点)
  • Toggle Mode:切换开关(再点取消选中)
  • Button Group:单选组(多个按钮只能选一个)
  • Focus Mode:键盘/手柄导航

自定义按钮外观美化

用 Theme Overrides 改外观:

  • Colors → Font Color:文字颜色
  • Styles → Normal / Hover / Pressed:三种状态背景
  • 新建 StyleBoxFlat 可调背景色、圆角、边框

💡 要做漂亮按钮,重点调 Hover(悬停)和 Pressed(按下)两种状态。

代码里做图片按钮进阶

用纹理做图标按钮:

GDSCRIPTfunc make_icon_button():
    var b = Button.new()
    b.text = "⚙"
    # 或用图标:b.icon = load("res://assets/icons/settings.png")
    b.tooltip_text = "设置"
    b.pressed.connect(_on_settings_pressed)
    add_child(b)
⚠️
按钮点击没反应?

检查:①是否连接了 pressed 信号;②函数是否存在;③按钮是否被其他 UI 盖住(Mouse Filter)。

⚠️
Disable 的按钮还能触发?

禁用后不会触发 pressed,但 button_down 可能仍触发。判断按钮状态用 is_disabled()。

🧪 动手试一试

🏋️ 课后练习

做 3 个按钮:开始(跳转/打印)、设置(Toggle 开关切换一个面板显隐)、退出。并让「开始」按钮悬停变色。

设置面板 visible 切换;Theme Overrides → Styles → Hover 自定义。

💡

单选组(Button Group)做「难度选择:简单/中等/困难」非常方便。

💡

给按钮加 Tooltip Text 悬停提示,体验更好。

🎓 本课小结

Button 核心是 pressed 信号;支持 Disabled/Toggle/单选组;用 Theme Overrides 的 Styles 自定义三种状态外观。