HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 37 课
MODULE 4 · UI 界面 · 动画 · 特效
第 37 课 · 主菜单与场景跳转
🎯 本课学习目标
- 制作完整的主菜单界面
- 实现菜单 → 游戏 的场景切换
- 实现游戏 → 菜单 的返回
没有主菜单的游戏不完整。本课做启动菜单,并学会在场景间跳转。
📖 详细教学步骤
创建主菜单场景搭建
- 新建场景,根节点
Control(UI 场景常用根节点),命名 Menu,保存 menu.tscn - 加全屏背景(ColorRect 或 Panel + 背景图)
- 加居中 VBoxContainer:标题 Label + 开始按钮 + 设置按钮 + 退出按钮
💡 主菜单也用 CanvasLayer 或 Control 根均可,Control 即可。
把主菜单设为主场景操作
- 菜单 项目 → 项目设置 → 常规 → Application → Run → Main Scene
- 选择 menu.tscn
- 以后按 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 单例。