You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何切换到指定场景实例?线性游戏章节场景切换技术求助

问题

我正在制作一款线性游戏,包含章节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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:07:38