Instancing

Вступ

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

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

../../_images/tree.png

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

../../_images/instancingpre.png

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

../../_images/instancing.png

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

Instancing by example

To learn how instancing works, let’s start by downloading a sample project: 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

Multiple instances

You can add as many instances as you like to a scene, either by using the «Instance» button again, or by clicking on the ball instance and pressing «Duplicate» (Ctrl + D):

../../_images/instancing_multiball.png

Знову запустіть сцену і усі кульки впадуть.

../../_images/instancing_multiball.gif

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

Open the Ball scene and add a PhysicsMaterial by opening the «Physics Material Override» dropdown in the Inspector dock and selecting «New PhysicsMaterial».

../../_images/instancing_physicsmat1.png

Потім розгорніть матеріал, натиснувши на нього, і встановіть властивість Bounce (відскок) на 1.

../../_images/instancing_physicsmat2.png

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

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

../../_images/instancing_property.png

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

Висновки

Instancing can be useful when you want to create many copies of the same object. It is also possible to create instances in code by using GDScript, see Instancing (continued).