Instancing (создание экземпляра)

Введение

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

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

../../_images/tree.png

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

../../_images/instancingpre.png

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

../../_images/instancing.png

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

Пример создания экземпляра

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

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

../../_images/instancing_import.png

Перейдите в папку, которую вы извлекли, и откройте файл «project.godot», который вы найдете внутри нее. После этого новый проект появится в списке проектов. Отредактируйте проект, нажав кнопку „Редактирование“.

Этот проект содержит две сцены: «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

Нажмите кнопку «Воспроизвести» и посмотрите, как мяч падает в нижнюю часть экрана:

../../_images/instancing_playbutton.png

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

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

../../_images/instancing_multiball.png

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

../../_images/instancing_multiball.gif

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

Откройте сцену Ball и добавьте PhysicsMaterial нажав на стрелку и выбрав пункт «New PhysicsMaterial».

../../_images/instancing_physicsmat1.png

Затем раскройте параметры материала и установите параметр Bounce на 1.

../../_images/instancing_physicsmat2.png

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

You can also adjust individual instances. Set the bounce value back to 0 and then in the Main scene, select one of the instanced balls. Resources like PhysicsMaterial are shared between instances by default, so we need to make it unique. Click on the down arrow and select «Make Unique». Set its Bounce to 1 and press «Play».

../../_images/instancing_property.png

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

Вывод

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