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

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

Відкрийте сцену `` Ball '', натисніть на неї `` PhysicsMaterial '' та встановіть для властивості `` Bounce`` значення `` 1``.

../../_images/instancing_physicsmat2.png

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

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 tools button in the top-right of the Inspector dock and select "Make Sub-Resources Unique". Set its Bounce to 1 and press "Play".

../../_images/instancing_property.png

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

Висновки

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