Посібник користувача InventorySystemDemo¶
🇬🇧 English | 🇺🇦 Українська
Дата-керована система інвентаря та спорядження для Unreal Engine 5.7 з повноцінною підтримкою мультиплеєра.
Предмети створюються як Data Assets, геймплей-код викликає один метод, решту робить плагін — включно з мережевою реплікацією.
Версія 1.0 · Runtime · UE 5.7 · Примітки до випуску
Швидкий старт¶
1. Підключіть плагін. Скопіюйте Plugins/InventorySystemDemo у теку Plugins/ свого
проєкту та ввімкніть його: Edit → Plugins → Inventory System.
2. Створіть предмет. Content Browser → правий клік →
Miscellaneous → Data Asset → ISItemDefinition. Назвіть DA_HealthPotion, задайте
DisplayName, і в полі Fragments додайте:
- Stackable →
MaxStackSize = 10 - Consumable →
ConsumeAmount = 1
Не хочете створювати нічого просто щоб подивитися? Плагін привозить сім готових предметів у
InventorySystemDemo Content → Demo → Items(щоб їх було видно, увімкніть Show Plugin Content у налаштуваннях Content Browser). Меч, щит, шолом, смолоскип, зілля, руда й реліквія разом покривають усі п'ять фрагментів.
3. Дайте персонажу інвентар. Blueprint персонажа → Add Component → Inventory.
4. Перевірте. Натисніть Play і відкрийте консоль:
DemoInvGive Potion 5 видати собі 5 зілль
DemoInvOverlay відкрити інспектор
Готово — предмети видаються, стакуються й використовуються.
З коду те саме:
int32 Remainder = 0;
InventoryComponent->TryAddItem(PotionDefinition, 5, Remainder);
Цей рядок працює і в одиночній грі, і на клієнті мультиплеєра — без жодної гілки
HasAuthority() з вашого боку.
Три ідеї, на яких тримається плагін¶
Якщо читати лише один абзац — читайте цей.
1. Предмет — це набір фрагментів, а не клас.
Немає базового класу «зброя» чи «зілля». Меч — це Equippable + Durability, зілля —
Stackable + Consumable, смолоскип — усі три одразу: Equippable + Durability +
Consumable (тримається в руці, має запас пального й витрачається при використанні).
«Усі три» — це три з чотирьох щойно згаданих типів, а не всі фрагменти плагіна: їх
усього п'ять (Stackable, Equippable, Consumable, Durability, Weight). Додати
здатність = додати фрагмент; код інвентаря при цьому не змінюється.
2. Один API для будь-якого режиму гри.
Кожен метод, що змінює стан, називається Try* і викликається звідусіль. В одиночній
грі він виконується на місці й не створює RPC узагалі; на клієнті — сам пересилається
на сервер.
3. Те, що робить копію унікальною, живе в екземплярі. Меч на 12/100 міцності й новий меч посилаються на той самий ассет, але мають різні значення в екземплярі — і саме тому не об'єднуються в стек.
Кому що читати¶
| Ви | Починайте з |
|---|---|
| Зовсім новачок — хочете побачити результат за 10 хв, а не читати главу за главою | Від ассета до руки гравця |
| Дизайнер, що створює предмети | 01 → 03 → 04 |
| Геймплей-програміст | 05 → 11 |
| Читає код / розширює плагін | Архітектура → 04 |
| UI-програміст | 08 → 12 |
| Програміст мультиплеєра | 01 → 09 |
| QA / тулінг | 13 |
Щось поводиться дивно? 14 — Поширені запитання містить чеклист «чому не працює».
Розділи¶
| # | Розділ | Що всередині |
|---|---|---|
| – | Від ассета до руки гравця | Історія на 10 хвилин: меч, факел і зілля від Data Asset до руки гравця |
| – | Примітки до випуску | Що є, що змінилося, чого ще немає |
| 01 | Основні поняття | Тип і екземпляр, фрагменти, правила стакування, розріджені слоти |
| 02 | Підключення | Встановлення, Project Settings, де живе інвентар і як його знайти |
| 03 | Створення предметів | Довідник полів і готові рецепти: зілля, меч, руда, боєприпаси |
| 04 | Фрагменти | П'ять готових фрагментів, усі хуки, як написати власний |
| 05 | Операції з інвентарем | Додати, перекласти, використати, відсортувати; фільтри, вага, події |
| 06 | Спорядження | Слоти як теги, вдягання, візуальні актори, сумарні статистики |
| 07 | Лут і предмети у світі | Таблиці луту, скрині, предмети на землі, свій контейнер |
| 08 | Побудова інтерфейсу | Сітка, іконки, тултипи, перетягування, вікно скрині |
| 09 | Мультиплеєр | Чому той самий код працює в обох режимах; єдиний виняток |
| 10 | Збереження | ExportState / ImportState, вбудовування у свій save game |
| 11 | Рецепти | Крафт, торгівля, хотбар, лутання трупа, викидання, ремонт |
| 12 | Довідник API | Повний перелік публічного API |
| 13 | Відлагодження | Інспектор, консольні команди, логи, чеклист проблем |
| 14 | Поширені запитання | Короткі відповіді на часті питання |
| – | Архітектура | Як плагін влаштований усередині і чому саме так |
Домовленості¶
- «Тип предмета» — ассет
UISDemoItemDefinition. «Екземпляр» — конкретна копія в чиємусь інвентарі (UISDemoItemInstance). - Сніпети коду — на C++, якщо не вказано інше. Майже кожна показана функція викликається й з Blueprint; два винятки позначені (лише C++) у 12 — Довідник API і жодної можливості не додають.
- «Інвентар» означає
UISDemoInventoryComponent, «спорядження» —UISDemoEquipmentComponent.