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

第 37 课 · 主菜单与场景跳转

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

🎯 本课学习目标

没有主菜单的游戏不完整。本课做启动菜单,并学会在场景间跳转。

📖 详细教学步骤

创建主菜单场景搭建

  1. 新建场景,根节点 Control(UI 场景常用根节点),命名 Menu,保存 menu.tscn
  2. 加全屏背景(ColorRect 或 Panel + 背景图)
  3. 加居中 VBoxContainer:标题 Label + 开始按钮 + 设置按钮 + 退出按钮

💡 主菜单也用 CanvasLayer 或 Control 根均可,Control 即可。

把主菜单设为主场景操作

  1. 菜单 项目 → 项目设置 → 常规 → Application → Run → Main Scene
  2. 选择 menu.tscn
  3. 以后按 F5 会先进入主菜单

开始按钮 → 进入游戏代码

用 change_scene_to_file 切换场景:

GDSCRIPTextends Control

func _on_start_pressed():
    get_tree().change_scene_to_file("res://scenes/main.tscn")

func _on_settings_pressed():
    settings_panel.visible = true

func _on_quit_pressed():
    get_tree().quit()   # 退出游戏(编辑器里运行则停止)

游戏内返回主菜单代码

游戏里(如结束界面)返回主菜单:

GDSCRIPTfunc _on_menu_pressed():
    get_tree().paused = false   # 先取消暂停
    get_tree().change_scene_to_file("res://scenes/menu.tscn")

场景切换时数据传递(进阶)进阶

切场景后节点会销毁,数据用「单例 Autoload」保存(第 67 课详讲):

GDSCRIPT# 创建 autoload 脚本 Globals.gd(第67课详细配置)
var best_score: int = 0
var player_name: String = ""

# 任意场景都能访问
Globals.best_score = 100

菜单按钮悬停音效(预演)进阶

给按钮加音效会让菜单「活」起来(音频第 44 课):

GDSCRIPTfunc _on_start_button_mouse_entered():
    $HoverSfx.play()
⚠️
点击开始没反应/场景没切?

检查路径:res://scenes/main.tscn 是否与你的文件结构一致。路径错误会在输出面板报错。

⚠️
返回主菜单后游戏还在暂停?

切换前先 get_tree().paused = false。

🧪 动手试一试

🏋️ 课后练习

做一个主菜单:标题 + 开始 + 设置 + 退出,开始能进入游戏场景,游戏结束界面能返回主菜单。

change_scene_to_file 双向跳转;主场景设为 menu.tscn。

💡

res:// 是项目根目录的固定前缀,引用资源都要用它。

💡

场景文件路径建议统一放 scenes/ 文件夹。

🎓 本课小结

主菜单 = 标题 + 按钮 + 场景跳转;change_scene_to_file 切场景;Main Scene 设菜单;跨场景数据用 Autoload 单例。