Instancing (вставка екземпляра, Інстансування)

Вступ

Створення одної сцени та додавання до неї вузлів може працювати для маленьких проектів, але по мірі збільшення проекта в розмірах і складності, кількість вузлів може швидко стати некерованою. Щоб вирішити це, Godot дозволяє розділити проект на будь-яку кількість сцен. Це дає вам потужний інструмент, який допоможе організувати різні компоненти вашої гри.

В Сцени та вузли ви дізналися, що сцена - це сукупність вузлів, організованих у структурі дерева, з одним вузлом в якості кореня дерева.

../../_images/tree.png

Ви можете створити скільки завгодно сцен і зберегти їх на диску. Сцени, збережені таким чином, називаються «упакованими сценами» і мають розширення .tscn.

../../_images/instancingpre.png

Після того, як сцена збережена, її можна встановити (інстансувати) в іншу сцену так, ніби це який-не-будь вузол.

../../_images/instancing.png

На малюнку вище Сцена B була встановлена в Сцену А в якості вузла-нащадка.

Зразок інстансування

Щоб краще зрозуміти, як створювати екземпляр (instancing), давайте завантажимо зразок проекту: instancing.zip.

Розпакуйте цей проект куди завгодно. Потім відкрийте Godot і додайте цей проект до керівника проектів за допомогою кнопки „Імпортувати“:

../../_images/instancing_import.png

Перейдіть до витягнутої папки та відкрийте файл «project.godot», який ви можете знайти в ній. Після цього новий проект з’явиться у списку проектів. Відредагуйте проект, натиснувши кнопку «Редагувати».

Цей проект містить дві сцени: «Ball.tscn» і «Main.tscn». Сцена м’яча («Ball.tscn») використовує RigidBody2D (тверде тіло 2D) для забезпечення фізичної поведінки, тоді як головна сцена («Main.tscn») має набір перешкод для зіткнення з м’ячем (використовується StaticBody2D (статичне тіло 2D)).

../../_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

Редагування екземплярів

Open the Ball scene, expand the PhysicsMaterial by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

Натисніть «Відтворити». Зверніть увагу, що всі м’ячі тепер стрибають сильніше. Оскільки всі м’ячі створені на основі збереженої сцени, то зміни в цій сцені впливатимуть на всі екземпляри м’ячів.

Ви також можете налаштувати окремі екземпляри. Встановіть значення Bounce (відскок) назад на 0, а потім, у сцені Main, виберіть один із створених м’ячів. Такі ресурси, як PhysicsMaterial (фізичний матеріал) за замовчуванням поширюються на всі екземпляри, тому нам потрібно зробити його унікальним. Клацніть стрілку вниз і виберіть «Зробити унікальним». Встановіть його Bounce (відскок) в 1 і натисніть кнопку «Відтворити».

../../_images/instancing_property.png

Зауважте, що поруч із налаштованою властивістю з’являється сіра кнопка «повернутися». Якщо ця кнопка присутня, це означає, що ви змінили властивість у вставленій сцені. Тепер навіть якщо ви зміните цю властивість в початковій збереженій сцені, спеціальне значення залишиться незмінним. Натискання кнопки повернення поверне властивість до значення збереженої сцени.

Висновки

Instancing (створення екземплярів) може бути корисним, коли ви хочете створити багато копій одного і того ж об’єкта. Також екземпляри можна створити в коді за допомогою GDScript, дивіться Instancing (продовження).