Система управления сценами - Документация

Этот документ объясняет, как использовать систему управления сценами в этом проекте Godot.

Обзор

Это синглтон-класс, который позволяет из любой точки кода переключить сцену в игре.

Как это работает

Добавление новых сцен

Внутри scene_manager.gd есть словарь _scenes:

var _scenes: Dictionary = {
	"PK": "res://scenes/Hall_PK.tscn",
	"MainMenu": "res://scenes/main_menu.tscn",
}

В него необходимо добавлять все сцены, которые должны быть доступны для переключения.

Смена сцены

По ключу из словаря _scenes (рекомендуется)

Из любого метода сцену можно сменить так:

SceneManager.goto_scene_by_name("PK")
По пути к сцене (менее удобно)

Из любого метода сцену можно сменить так:

SceneManager.goto_scene("res://scenes/Hall_PK.tscn")

Сигнал scene_changed

SceneManager отправляет сигнал scene_changed(new_scene), когда сцена успешно переключена. К нему можно подключиться, чтобы обновлять UI или ссылки на объекты:

func _ready() -> void:
	SceneManager.scene_changed.connect(_on_scene_changed)

func _on_scene_changed(new_scene: Node) -> void:
	print("Сцена сменилась на: ", new_scene.name)

Примечания

  1. Не рекомендуется из других скриптов самостоятельно менять сцену через get_tree().change_scene*(). Для этого используйте методы SceneManager.

  2. После смены сцены не храните ссылки на узлы старой сцены — они уже free()‑нуты.

  3. Если нужно получить корень текущей сцены, используйте get_tree().current_scene (SceneManager обновляет его при смене сцены).

FAQ

Как получить объект класса SceneManager?

SceneManager подключён через Autoload (синглтон), поэтому его экземпляр доступен глобально по имени SceneManager из любого скрипта. Достаточно напрямую вызывать его методы, например:

SceneManager.goto_scene_by_name("MainMenu")