# Система управления сценами - Документация Этот документ объясняет, как использовать систему управления сценами в этом проекте Godot. ## Обзор Это **синглтон-класс**, который позволяет из любой точки кода переключить сцену в игре. ### Как это работает #### Добавление новых сцен Внутри `scene_manager.gd` есть словарь `_scenes`: ```gdscript var _scenes: Dictionary = { "PK": "res://scenes/Hall_PK.tscn", "MainMenu": "res://scenes/main_menu.tscn", } ``` В него необходимо добавлять все сцены, которые должны быть доступны для переключения. #### Смена сцены ##### По ключу из словаря `_scenes` (рекомендуется) Из любого метода сцену можно сменить так: ```gdscript SceneManager.goto_scene_by_name("PK") ``` ##### По пути к сцене (менее удобно) Из любого метода сцену можно сменить так: ```gdscript SceneManager.goto_scene("res://scenes/Hall_PK.tscn") ``` ### Сигнал `scene_changed` `SceneManager` отправляет сигнал `scene_changed(new_scene)`, когда сцена успешно переключена. К нему можно подключиться, чтобы обновлять UI или ссылки на объекты: ```gdscript 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` из любого скрипта. Достаточно напрямую вызывать его методы, например: ```gdscript SceneManager.goto_scene_by_name("MainMenu") ```