如何切换到指定场景实例?线性游戏章节场景切换技术求助
问题
我正在制作一款线性游戏,包含章节1、章节2等内容,各章节内容不同但存在共性(如均有章节标题),希望章节能依次推进(目前仅需显示章节标题后切换至下一章)。
已完成以下操作:
- 创建了Chapter场景(
chapter.tscn,类名Chapter),包含导出变量chapter_name(String类型)和next_chapter(Chapter类型); - 在主游戏场景中添加了多个该场景的实例(Chapter1、Chapter2……),完成命名并指定了各章节的下一章;
- 在主游戏节点中添加了导出变量
first_chapter,用于在代码中引用第一章。
现在需要在主游戏场景(主菜单)的脚本中,点击"新游戏"按钮时切换到first_chapter指向的Chapter1实例,而非加载通用的Chapter场景文件。
解决方案
1. 主菜单脚本实现"新游戏"跳转
在主游戏场景(主菜单)的脚本中,通过隐藏菜单、显示目标章节实例的方式实现跳转:
extends Node2D # 替换为你实际使用的节点类型 @export var first_chapter: Chapter @onready var main_menu = $MainMenu # 替换成你的菜单节点路径 func _on_new_game_button_pressed(): # 隐藏主菜单 main_menu.visible = false # 显示第一章实例 first_chapter.visible = true # 触发章节的初始化逻辑(如显示标题) first_chapter.start_chapter()
2. Chapter场景脚本实现章节切换逻辑
在Chapter类的脚本中,添加标题显示和自动切换下一章的逻辑:
extends Node2D # 替换为你实际使用的节点类型 @export var chapter_name: String @export var next_chapter: Chapter @onready var chapter_title_label = $ChapterTitleLabel # 替换成你的标题标签路径 func _ready(): # 默认隐藏章节,等待外部调用激活 visible = false func start_chapter(): # 显示当前章节标题 chapter_title_label.text = chapter_name # 延迟2秒后切换到下一章(可根据需求调整时长) await get_tree().create_timer(2.0).timeout go_to_next_chapter() func go_to_next_chapter(): # 隐藏当前章节 visible = false if next_chapter: # 激活并显示下一章 next_chapter.visible = true next_chapter.start_chapter() else: # 所有章节完成,可返回主菜单或显示结局 get_tree().change_scene_to_file("res://main_menu.tscn") # 按需调整路径
关键注意事项
- 确保所有Chapter实例在主场景中默认设置为隐藏状态(
visible = false),避免初始时全部显示; - 在编辑器中,将"新游戏"按钮的
pressed信号连接到主菜单脚本的_on_new_game_button_pressed方法; - 如果后续章节需要更复杂的逻辑(比如玩家交互后再切换),只需修改
start_chapter中的触发条件即可。
内容的提问来源于stack exchange,提问作者Petra1999
相关产品推荐
相关产品推荐

