Сцены и узлы

Введение

../../_images/chef.png

Забудьте на минуту, что вы – разработчик видеоигр и вместо этого представьте себя в роли шеф-повара! Скиньте с себя хипстерский фасон и вместо этого наденьте поварской колпак и жакет. Теперь все, что от вас требуется – это создавать новые и вкусные рецепты для ваших гостей.

Итак, как именно шеф-повар создает рецепт? Каждый рецепт разделён на две части: в первой приведён список ингредиентов, а во второй – последовательность их приготовления. Таким образом, каждый имеет возможность приготовить блюдо по созданному рецепту и насладиться вашим великолепным творением.

Создание игр в Godot очень похоже на то, что делают на кухне. На этой кухне узлы похожи на холодильник, полный свежих ингредиентов, из которых можно готовить блюдо.

Существует множество типов узлов. Одни показывают изображения, другие воспроизводят звук, третьи отображают 3D-модели и т.д. Их десятки.

Узлы (ноды)

Но давайте начнем с основ. Ноды являются фундаментальными строительными блоками для создания игры. Как упоминалось ранее, нода может выполнять множество специализированных функций. Однако любая используемая нода всегда имеет следующие атрибуты:

  • У нее есть имя.

  • Он имеет редактируемые свойства.

  • Он может получать обратный вызов для обработки каждого кадра.

  • Он может быть расширен (чтобы иметь больше функций).

  • Он может быть добавлен к другому узлу (ноду) в качестве дочернего.

../../_images/tree.png

Еще одно важное замечание. У узлов могут быть другие узлы в качестве дочерних. При расположении таким образом узлы образуют дерево.

Способность располагать узлы таким образом создает мощный инструмент для организации проектов. Поскольку разные узлы имеют разные функции, объединение их позволяет создавать более сложные функции.

Не беспокойтесь, если не разобрались в этом. Мы продолжим изучение этого в следующих нескольких разделах. Самое важное, что нужно запомнить на данный момент - это то, что узлы существуют и могут быть организованы таким вот образом.

Сцены

../../_images/scene_tree_example.png

Теперь, когда концепция узлов определена, следующим логическим шагом является объяснение того, что такое Сцена.

Сцена состоит из группы узлов, организованных иерархически (в виде дерева). Кроме того, сцена:

  • всегда имеет только один корневой нод.

  • может быть сохранена на диск и загружена обратно.

  • может быть инстанцирована (т. е. использована несколько раз через создание её экземпляров, подробнее об этом позже).

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

В целом, редактор Godot является редактором сцены. Он имеет множество инструментов для редактирования 2D и 3D-сцен, а также пользовательских интерфейсов, но основан он на концепции редактирования сцены и узлов, которые ее составляют.

Редактор

Откройте проект, который вы сделали в Введение в редактор Godot, или создайте еще один. Это откроет редактор Godot:

../../_images/empty_editor.png

Как упоминалось ранее, создание игр в Godot похоже на работу на кухне, поэтому давайте откроем холодильник и добавим свежие узлы в проект. Мы начнем с сообщения "Hello World!", которое поместим на экран.

Чтобы сделать это, нам надо добавить узел Label . Нажмите кнопку "Add Child Node" в верхнем левом углу панели сцены (значок с символом плюса). Эта кнопка — основной метод добавления новых узлов в сцену, и она всегда добавит указанный узел в качестве потомка выбранного в настоящий момент узла (или, в случае пустой сцены, в качестве "корневого" узла - "root").

Примечание

В пустой сцене (без корневого узла) панель сцены содержит несколько способов быстрого добавления корневого узла в сцену. "2D Scene" добавит узел Node2D, "3D Scene" добавит узел Spatial, "User Interface" добавит узел Control, а "Other Node" допускает выбор вами любого узла (так что он эквивалентен нажатию кнопки "Add Child Node" (Добавить дочерний узел). Вы также можете нажать на значок-звёздочку, чтобы переключить отображение на экране ваших избранных узлов.

Обратите внимание, что эти пресеты приведены здесь для удобства и не являются обязательными для различных типов сцен. Не каждая 3D-сцена должна иметь Spatial (пространственный) узел в качестве корневого, а также не каждый графический интерфейс пользователя или 2D сцена нуждается в Control node (узел управления) или Node2D в качестве корневого узла.

Теперь, чтобы добавить узел метки в эту сцену, вы можете нажать на кнопку "Other Node" (Другой узел) или кнопку "Add Node" (Добавить узел) в верхней части. В непустых сценах используется кнопка "Add Node" (Добавить узел) для создания каждого дочернего узла.

../../_images/newnode_button.png

Откроется диалоговое окно Создания Узла, показывающее длинный список узлов, которые могут быть созданы:

../../_images/node_classes.png

Здесь выберите узел "Label". Найти его через поиск, вероятно, самый быстрый способ:

../../_images/node_search_label.png

И наконец, создайте Label! Многое происходит, при нажатии кнопки "Создать":

../../_images/editor_with_label.png

В первую очередь, сцена меняется на 2D-редактор (потому что Label является 2D Узлом) и в верхнем левом углу окна просмотра появляется Label.

Узел появляется в редакторе дерева сцены в панели "Сцена", а свойства узла "Label" отобразятся в панели "Инспектор".

Следующим шагом будет изменение свойства «Text». Изменим его на «Hello, World!»:

../../_images/hw.png

Отлично, сцена готова к запуску! Нажмите кнопку "Запустить сцену" в правой верхней панели (или нажмите F6):

../../_images/playscene.png

Ииии... Ой.

../../_images/neversaved.png

Сцены должны быть сохранены перед запуском, поэтому сохраните сцену, например, как Hello.tscn через меню Сцена -> Сохранить:

../../_images/save_scene.png

И вот здесь происходит нечто забавное. Файл диалога является файлом и позволяет сохранить его внутри проекта. Корень проекта - "res: //", что означает "путь ресурса". Это означает, что файлы могут быть сохранены только внутри проекта. В будущем, при выполнении файловых операций в Godot, помните, что "res: //" - это путь к ресурсам, вне зависимости от платформы или места установки, это способ найти файлы ресурсов которые находятся внутри игры.

После сохранения сцены и повторного ее запуска, демка "Hello, World!" должна, наконец, запуститься:

../../_images/helloworld.png

Успех!

Примечание

Если это не сработает немедленно, и вы имеете hiDPI хотя бы на одном из ваших мониторов, перейдите в Проект → Настройки проекта → Display → Window, затем включите Allow Hidpi находящееся под Dpi.

Настройка проекта

Хорошо, пришло время настроить проект. Прямо сейчас, единственный способ запустить что-то - это запустить текущую сцену. Однако, проекты могут иметь несколько сцен, поэтому одна из них должна быть установлена как главная сцена. Именно эта сцена будет загружаться при каждом запуске проекта.

Эти настройки хранятся в файле project.godot, который является файлом открытого текста в формате win.ini (для удобства редактирования). Существуют десятки настроек, которые вы можете изменить в этом файле, чтобы изменить способ выполнения проекта. Чтобы упростить этот процесс, Godot предоставляет меню настроек проекта, который действует как своего рода интерфейс для редактирования файла project.godot.

Чтобы открыть это окно, выберите «Проект -> Настройки проекта» (Project -> Project Settings). Попробуйте сделать это сейчас.

Как только откроется окно, давайте выберем главную сцену. Найдите свойство Application/Run/Main Scene (Приложение/Запуск/Главная Сцена) и нажмите на него, чтобы выбрать 'Hello.tscn'.

../../_images/main_scene.png

Теперь, после этих изменений, когда вы нажимаете кнопку "Запустить" (или F5), эта сцена будет запускаться независимо от того, какая сцена редактируется в данный момент.

Диалог настроек проекта предоставляет множество параметров, которые могут быть сохранены в файле project.godot, и отображает их значения по умолчанию. Если вы измените значение, появится галочка слева от ее имени. Это означает, что свойство будет сохранено в файле project.godot и запомнено.

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

Продолжение следует...

В этом уроке рассказывалось о "сценах и узлах", но до сих пор была только одна сцена и один узел! Не волнуйтесь, следующий урок углубится в это...