Интегрирование

Введение

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

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

../../_images/tree.png

Вы можете создать столько сцен, сколько хотите, и сохранить их на диск. Сцены, сохраненные таким образом, называются "Упакованные сцены" (Packed Scenes) и имеют расширение .tscn.

../../_images/instancingpre.png

Как только сцена была сохранена, ее можно интегрировать в другую сцену, как если бы это был любой другой узел.

../../_images/instancing.png

На вышеприведенном рисунке сцена В была добавлена в сцену А в качестве узла.

Интегрирование на примере

Чтобы узнать, как работает интегрирование, давайте начнем с загрузки примера проекта: instancing.zip.

Распакуйте этот проект в любое место. Затем откройте Godot и добавьте этот проект в менеджер проектов с помощью кнопки 'Import':

../../_images/instancing_import.png

Перейдите в папку, которую вы извлекли, и откройте файл "project.godot", который вы найдете внутри нее. После этого новый проект появится в списке проектов. Отредактируйте проект, нажав кнопку 'Edit'.

Этот проект содержит две сцены: "Ball.tscn" и "Main.tscn". Сцена Ball (мяч) использует RigidBody2D, чтобы обеспечить физическое поведение, в то время как сцена Main имеет множество препятствий для столкновения мяча (использует StaticBody2D).

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Откройте сцену Main и затем выберите корневой узел:

../../_images/instancing_mainroot.png

Мы хотим добавить экземпляр сцены Ball в качестве дочернего узла``Main``. Нажмите кнопку в виде "цепи" (во всплывающей подсказке сказано: "Добавить файл сцены как узел.") и выберите файл Ball.tscn.

../../_images/instancing_linkbutton.png

Мяч будет помещен в верхний левый угол области экрана (это (0, 0) в координатах экрана). Нажмите и перетащите мяч куда-нибудь рядом с верхним центром сцены:

../../_images/instancing_placeball.png

Нажмите «Play» и посмотрите, как мяч упадёт вниз:

../../_images/instancing_playbutton.png

Множественное создание экземпляров

Вы можете добавить на сцену столько экземпляров, сколько захотите, либо с помощью кнопки «Добавить файл сцены как узел», либо нажав на экземпляр шарика и нажав «Дублировать» (Ctrl + D):

../../_images/instancing_multiball.png

Запустите сцену снова, и все шары упадут.

../../_images/instancing_multiball.gif

Редактирование экземпляров

Откройте сцену Ball, найдите в его настройках параметр PhysicsMaterial, нажмите по нему и установите параметр Bounce (отскок) на значение 1.

../../_images/instancing_physicsmat2.png

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

Вы также можете настроить отдельные экземпляры. Установите значение отскока обратно на 0, а затем в сцене Main выберите один из шаров. Такие ресурсы, как PhysicsMaterial по умолчанию являются общими для всех экземпляров, но мы можем сделать их уникальными. Нажмите на стрелку вниз и выберите пункт "Сделать Уникальным (Make Unique)". Установите для параметра``Bounce`` значение 1 и нажмите «Play».

../../_images/instancing_property.png

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

Вывод

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