Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Створення екземплярів

У попередній частині ми бачили, що сцена — це набір вузлів, організованих у структуру дерева, з одним вузлом як коренем. Ви можете розділити свій проект на будь-яку кількість сцен. Ця функція допоможе вам розбити та організувати різні компоненти вашої гри.

Ви можете створювати скільки завгодно сцен і зберігати їх як файли з розширенням .tscn, що означає "текстова сцена". Прикладом може слугувати файл label.tscn з попереднього уроку. Ми називаємо ці файли "запакованими сценами", оскільки вони містять інформацію про вміст вашої сцени.

Ось приклад м'яча. Він складається з вузла RigidBody2D, який має корінь Ball, що дозволяє м'ячу падати і відскакувати від стін, вузла Sprite2D і вузла CollisionShape2D.

../../_images/instancing_ball_scene.png

Після збереження сцени вона працює як шаблон: ви можете відтворювати її в інших сценах скільки завгодно разів. Відтворення об’єкта з такого шаблону називається instancing.

../../_images/instancing_ball_instances_example.png

Як ми згадували в попередній частині, екземпляри сцен поводяться як вузол: редактор за замовчуванням приховує їх вміст. Коли ви створюєте екземпляр Ball, ви бачите лише вузол Ball. Зверніть також увагу на те, що кожен дублікат має унікальну назву.

Кожен екземпляр сцени М'яч починається з тієї самої структури та властивостей, що й ball.tscn. Однак ви можете змінювати кожну з них незалежно, наприклад, змінювати спосіб відскоку, вагу або будь-які властивості, визначені у вихідній сцені.

На практиці

Давайте використаємо інстанцію на практиці, щоб побачити, як вона працює в Godot. Запрошуємо вас завантажити приклад проекту м'яча, який ми підготували для вас: instancing_starter.zip.

Extract the archive on your computer. To import it, you need the Project Manager. The Project Manager is accessed by opening Godot, or if you already have Godot opened, click on Project -> Quit to Project List (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q on macOS)

У Менеджері проектів натисніть кнопку Імпортувати, щоб імпортувати проект.

../../_images/instancing_import_button.png

У спливаючому вікні, що з’явиться, натисніть кнопку огляду та перейдіть до теки, яку ви розпакували.

../../_images/instancing_import_browse.png

Двічі клацніть файл project.godot, щоб відкрити його.

../../_images/instancing_import_project_file.png

Нарешті, натисніть кнопку Імпорт і редагування.

../../_images/instancing_import_and_edit_button.png

Проект містить дві упаковані сцени: main.tscn, що містить стіни, з якими стикається м'яч, та ball.tscn. Головна сцена повинна відкриватися автоматично. Якщо ви бачите порожню 3D сцену замість головної, натисніть кнопку 2D у верхній частині екрана.

../../_images/instancing_2d_scene_select.webp ../../_images/instancing_main_scene.png

Додамо м'яч як дочірній вузол Main. У панелі «Сцена» виберіть головний вузол. Потім клацніть значок зв'язування у верхній частині панелі сцени. Ця кнопка дозволяє вам додати екземпляр сцени як дочірній для поточного вибраного вузла.

../../_images/instancing_scene_link_button.png

Двічі клацніть сцену з м’ячем, щоб створити її екземпляр.

../../_images/instancing_instance_child_window.png

М'яч з’явиться у верхньому лівому куті вікна перегляду.

../../_images/instancing_ball_instanced.png

Клацніть на ньому та перетягніть його до центру перегляду.

../../_images/instancing_ball_moved.png

Запустіть гру, натиснувши F5 (Cmd + B на macOS). Ви повинні побачити, як він падає.

Тепер ми хочемо створити більше екземплярів вузла Ball. Виділивши кулю, натисніть Ctrl + D (Cmd + D на macOS), щоб викликати команду дублювання. Клацніть і перетягніть, щоб перемістити нову кулю в інше місце.

../../_images/instancing_ball_duplicated.png

Ви можете повторювати цей процес, поки у сцені не з’явиться кілька м'ячів.

../../_images/instancing_main_scene_with_balls.png

Запустіть гру ще раз. Тепер ви повинні бачити, як кожен м'яч падає незалежно один від одного. Це те, що роблять екземпляри. Кожен є самостійним відтворенням шаблонної сцени.

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

Є ще багато про екземпляри. Ця особливість дозволяє:

  1. Змініть властивості однієї кулі, не впливаючи на інші за допомогою Інспектора.

  2. Змініть властивості за замовчуванням для кожної Кулі, відкривши сцену ball.tscn і зробивши там зміни у вузлі Ball. Після збереження, всі екземпляри Кулі у проекті побачать оновлення своїх значень.

Примітка

Зміна властивості екземпляра завжди перевизначає значення з відповідної упакованої сцени.

Давайте спробуємо це зробити. Відкрийте файл ball.tscn і виберіть вузол Ball. В інспекторі праворуч клацніть на властивості PhysicsMaterial, щоб розгорнути її.

../../_images/instancing_physics_material_expand.webp

Встановіть його властивість Bounce на 0.5, клацнувши на числовому полі, набравши 0.5 і натиснувши Enter.

../../_images/instancing_property_bounce_updated.webp

Запустіть гру, натиснувши F5, і ви помітите, як тепер усі м’ячі відскакують набагато більше. Оскільки сцена Ball є шаблоном для всіх екземплярів, її зміна та збереження призведе до відповідного оновлення всіх екземплярів.

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

../../_images/instancing_scene_tabs.png

Виберіть один із створених вузлів Ball і в Інспекторі встановіть його значення Gravity Scale на 10.

../../_images/instancing_property_gravity_scale.png

Поруч зі зміненою властивістю з’являється сіра кнопка «Повернути».

../../_images/instancing_property_revert_icon.png

Ця піктограма вказує на те, що ви замінюєте значення з вихідної запакованої сцени. Навіть якщо ви зміните властивість у вихідній сцені, перевизначення значення буде збережено в екземплярі. Натискання значка повернення відновить властивість до значення у збереженій сцені.

Запустіть гру знову і зверніть увагу, що цей м’яч тепер падає набагато швидше за інші.

Примітка

Якщо ви зміните значення у PhysicsMaterial одного екземпляра, це вплине на всі інші. Це тому, що PhysicsMaterial є ресурсом, і ресурси розподіляються між екземплярами. Щоб зробити ресурс унікальним для одного екземпляра, клацніть його правою кнопкою миші в Інспекторі та виберіть у контекстному меню Зробити унікальним.

Ресурси є ще одним важливим будівельним блоком ігор Godot, про які ми розповімо в наступному уроці.

Екземпляри сцен як мова дизайну

Екземпляри та сцени в Godot пропонують чудову мову дизайну, що виділяє двигун серед інших. Ми розробили Godot навколо цієї концепції з нуля.

Ми рекомендуємо відмовитися від шаблонів архітектурного коду під час створення ігор з Godot, наприклад, діаграми модель-вигляд-контролер (MVC) або діаграми сутність-відношення. Замість цього ви можете почати з уявлення елементів, які гравці побачать у вашій грі, і структурувати ваш код навколо них.

Наприклад, ви можете розбити гру-шутер так:

../../_images/instancing_diagram_shooter.png

Ви можете створити подібну схему майже для будь-якої гри. Кожен прямокутник представляє об’єкт, який видно в грі з точки зору гравця. Стрілки вказують на зв'язок сцен між собою.

Після того, як у вас є діаграма, ми рекомендуємо створити сцену для кожного елемента, перерахованого в ній, щоб розвивати вашу гру. Для побудови дерева сцен ви будете використовувати екземпляри, або за допомогою коду, або безпосередньо в редакторі.

Програмісти, як правило, витрачають багато часу на розробку абстрактних архітектур і потім намагаючись вмістити в них компоненти. Проектування на основі сцен робить розробку швидшою та простішою, дозволяючи зосередитися на самій логіці гри. Оскільки більшість ігрових компонентів відображаються безпосередньо на сцені, використання підходу заснованого на екземплярі сцени, означає, що вам знадобиться зовсім небагато іншого архітектурного коду.

Ось приклад діаграми сцени для гри з відкритим світом з безліччю ресурсів і вкладених елементів:

../../_images/instancing_diagram_open_world.png

Уявіть, що ми почали зі створення кімнати. Ми могли б зробити кілька різних сцен кімнат з унікальним розташуванням меблів. Пізніше ми могли б створити сцену будинку, яка використовує декілька екземплярів кімнати для інтер’єру. Ми створили б цитадель з багатьох екземплярів будинків і великої місцевості, на якій ми б розмістили цитадель. Кожна з них буде сценою, що містить одну або кілька підсцен.

Пізніше ми могли б створити сцени, що представляють охорону, і додати їх до цитаделі. Вони будуть опосередковано додані до загального світу гри.

З Godot легко відтворити гру, схожу на цю, адже все, що вам потрібно зробити, це створити сцени та створити більше екземплярів сцен. Крім того, інтерфейс редактора побудований так, щоб ним було зручно користуватися, як програмістам, так і не програмістам. Типовий склад команди розробки може залучати 2D або 3D художників, дизайнерів рівнів, дизайнерів ігор та аніматорів і всі вони можуть працювати з інтерфейсом редактора.

Підсумок

Інстанціювання, процес створення об'єкта за шаблоном, має багато корисних застосувань. Зі сценами він дає вам:

  • Можливість розділити гру на повторно використовувані компоненти.

  • Інструмент для структурування та інкапсуляції складних систем.

  • Можливість продумати структуру вашого ігрового проекту природним чином.