Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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

Примітка

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

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

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

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

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

../../_images/instancing_ball_scene.webp

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

../../_images/instancing_ball_instances_example.webp

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

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

На практиці

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

Розпакуйте архів на вашому комп'ютері. Для імпортування вам знадобиться Менеджер проектів. Доступ до Менеджера проектів можна отримати, відкривши Godot, або, якщо Godot вже відкрито, натиснувши Project > Quit to Project List (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q на macOS)

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

../../_images/instancing_import_button.webp

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

../../_images/instancing_import_project_file.webp

Нарешті, натисніть кнопку Import.

../../_images/instancing_import_and_edit_button.webp

Може з’явитися вікно з повідомленням про те, що проєкт востаннє відкривався у старішій версії Godot. Це не проблема. Натисніть OK, щоб відкрити проєкт.

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

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

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

../../_images/instancing_scene_link_button.webp

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

../../_images/instancing_instance_child_window.webp

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

../../_images/instancing_ball_instanced.webp

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

../../_images/instancing_ball_moved.webp

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

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

../../_images/instancing_ball_duplicated.webp

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

../../_images/instancing_main_scene_with_balls.webp

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

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

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

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

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

Примітка

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

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

../../_images/instancing_ball_scene_open.webp

У доці «Сцена» ліворуч виберіть вузол «Куля». Потім у Inspector праворуч клацніть на властивість PhysicsMaterial, щоб розгорнути її.

../../_images/instancing_physics_material_expand.webp

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

../../_images/instancing_property_bounce_updated.webp

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

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

../../_images/instancing_scene_tabs.webp

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

../../_images/instancing_property_gravity_scale.webp

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

../../_images/instancing_property_revert_icon.webp

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

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

Примітка

Ви можете помітити, що не можете змінити значення PhysicsMaterial кулі. Це тому, що PhysicsMaterial є ресурсом і його потрібно зробити унікальним, перш ніж ви зможете редагувати його в сцені, яка пов'язана з його оригінальною сценою. Щоб зробити ресурс унікальним для одного екземпляра, клацніть правою кнопкою миші на властивості Physics Material в Inspector і натисніть Make Unique в контекстному меню.

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

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

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

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

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

../../_images/instancing_diagram_shooter.png

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

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

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

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

../../_images/instancing_diagram_open_world.png

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

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

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

Підсумок

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

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

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

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