Сцена меню
Создайте новую сцену и в качестве корня выберите User Interface — появится узел Control. На верхней панели в меню Anchor Preset выберите Full Rect, чтобы меню растягивалось на весь экран.
Кнопки удобнее не расставлять вручную, а сложить в контейнер. Добавьте VBoxContainer — он выстроит дочерние элементы столбиком, — и поставьте ему пресет Center. Внутрь добавьте несколько узлов Button и в инспекторе в поле Text напишите «Играть», «Настройки», «Выход».
Как заставить кнопку работать
Прикрепите скрипт к корню
Выделите узел Control и создайте скрипт, например main_menu.gd.
Подключите сигнал
Выделите кнопку, откройте справа вкладку Node → Signals, дважды щёлкните по pressed() и выберите корневой узел. Godot создаст функцию вида _on_play_pressed.
Напишите действие
Внутри функции перехода в игру: get_tree().change_scene_to_file("res://level.tscn"). Для кнопки выхода — get_tree().quit().
Назначьте главную сцену
Project → Project Settings → Application → Run → Main Scene: укажите сцену меню, чтобы игра начиналась с неё.
Оформление: тема, шрифт, отступы
Внешний вид всех кнопок разом задаётся темой. У корневого Control в поле Theme создайте New Theme — внизу откроется редактор, где можно поменять шрифт, цвета и отступы для типа Button. Кириллический шрифт TTF или OTF просто перетащите в проект и укажите в теме.
Расстояние между кнопками в VBoxContainer задаётся в Theme Overrides → Constants → Separation. Для экранов разных размеров проверьте Project Settings → Display → Window → Stretch Mode: для большинства 2D-игр подходит canvas_items.
Меню паузы
Сделайте отдельную сцену с кнопками «Продолжить» и «В меню» и добавьте её на уровень внутри CanvasLayer, чтобы меню не двигалось вместе с камерой. По умолчанию спрячьте её свойством Visible.
Пауза ставится строкой get_tree().paused = true. Чтобы само меню паузы при этом не замерло, у его корня в инспекторе выставьте Process → Mode → Always. По нажатию Esc показывайте меню и ставьте паузу, по кнопке «Продолжить» — наоборот.
Частые ошибки
- Кнопка не нажимается — сверху лежит другой Control с Mouse Filter в режиме Stop. Поставьте ему Ignore.
- Ошибка при смене сцены — неверный путь. Скопируйте его правым щелчком по файлу в FileSystem → Copy Path.
- Меню не реагирует во время паузы — не выставлен Process Mode Always.
- Кнопки расползаются на другом разрешении — они стоят вне контейнера или без якорей.
Экран настроек: громкость и полный экран
Ползунок громкости — узел HSlider с диапазоном от 0 до 1. Подключите его сигнал value_changed и передайте значение в звуковую шину: AudioServer.set_bus_volume_db(0, linear_to_db(value)). Для отдельной громкости музыки и эффектов заведите шины Music и SFX на нижней вкладке Audio.
Переключатель полного экрана — CheckButton с сигналом toggled: в обработчике вызывайте DisplayServer.window_set_mode с режимом WINDOW_MODE_FULLSCREEN или WINDOW_MODE_WINDOWED. Чтобы настройки не сбрасывались при каждом запуске, сохраняйте их в файл через класс ConfigFile в папку user://.
Когда быстрее через ИИ-агента
Опишите ИИ-агенту LeanTech, какое меню нужно: пункты, настройки громкости, сохранение, пауза. Он распишет дерево узлов, напишет GDScript с сигналами и объяснит, куда что подключить. Иконки и фон для меню он сгенерирует картинками.
Агент не работает внутри редактора Godot и не соберёт сцену за вас — узлы вы добавляете сами по его плану.