02 — Підключення¶
🇬🇧 English | 🇺🇦 Українська
Що потрібно зробити, щоб плагін запрацював у вашому проєкті, і як дістатися до інвентаря з коду.
Встановлення¶
- Скопіюйте теку
Plugins/InventorySystemDemoу текуPlugins/свого проєкту. - Edit → Plugins → Inventory System → увімкнути → перезапустити редактор.
- Якщо проєкт має C++ модуль і ви плануєте звертатися до плагіна з коду, додайте
залежності у свій
.Build.cs:
PublicDependencyModuleNames.AddRange(new string[]
{
"InventorySystemDemo", // ядро: предмети, компоненти, запити
"InventorySystemDemoWorld", // лише якщо потрібні скрині та предмети на землі
});
Із Blueprint нічого додавати не треба.
Чого робити НЕ потрібно: успадковувати PlayerState, GameState, GameMode чи
Character; налаштовувати систему вводу; додавати щось у DefaultEngine.ini.
Плагін не додає жодного геймплею, доки ви не створите перший предмет.
Приклади предметів у комплекті¶
Плагін привозить сім готових ISItemDefinition — щоб було на що подивитися,
перш ніж створювати своє:
| Ассет | Що показує |
|---|---|
DA_IronSword |
Equippable + Durability — зброя, що зношується |
DA_WoodenShield |
те саме для лівої руки |
DA_KnightHelmet |
Equippable + Durability із DurabilityPerUse = 0: броня, яку псує не власне використання, а влучання — ваш код віднімає міцність через ModifyStatValue |
DA_Torch |
Equippable + Durability + Consumable — три фрагменти разом |
DA_HealthPotion |
Stackable + Consumable — класичне зілля |
DA_CopperOre |
Stackable + Weight — крафтова сировина з масою |
DA_AncientRelic |
предмет без жодного фрагмента: просто річ у слоті |
Вони лежать у InventorySystemDemo Content → Demo → Items. Щоб побачити їх у Content
Browser, увімкніть Settings → Show Plugin Content. Розберіть їх, скопіюйте як
заготовки або просто видаліть — плагін на них не посилається.
Де живе інвентар¶
Компонент можна повісити на будь-який актор. Плагін не має власної думки про те, де саме йому бути — але вибір має наслідки:
| Куди повісити | Наслідок |
|---|---|
PlayerState |
Інвентар переживає смерть, respawn і зміну пешки. Типовий рюкзак. |
Pawn / Character |
Інвентар гине разом із тілом. Extraction-шутери, рогалики, лутання трупів. |
| Будь-який актор у світі | Скриня, труп, торговий автомат, ресурсна нода. |
Найпростіший шлях — додати компонент у Blueprint персонажа:
Add Component → Inventory. Далі в панелі Details налаштуйте MaxSlots,
фільтри та решту (05 — Операції з інвентарем).
Автоматичне створення компонентів¶
Якщо вам не хочеться редагувати Blueprint персонажа — плагін може створювати компоненти сам.
Project Settings → Game → Inventory System:
| Налаштування | Типове значення | Що робить |
|---|---|---|
Auto Create Player Inventory |
вимкнено | створює інвентар кожному гравцеві |
Auto Create Player Equipment |
вимкнено | і компонент спорядження також |
Auto Inventory Host |
PlayerState |
куди саме їх чіпляти |
Default Inventory Slots |
30 | скільки слотів давати |
Default Equipment Slots |
порожньо | які слоти відкривати |
Max Interaction Distance |
0 (вимкнено) | серверна межа відстані для мережевих запитів |
Validate Items On Startup |
увімкнено | перевірка ассетів, раз на сесію редактора |
Max Interaction Distance— межа тверезості, а не дальність взаємодії. Вона лише не дає модифікованому клієнтові обшукати скриню на іншому кінці карти; що гравець може дістати насправді, вирішує ваша система взаємодії. Беріть із запасом у кілька разів більшим за реальну дальність, щоб звичайний пінг її не зачіпав. Докладніше — 09 — Мультиплеєр.Ліміта ваги серед цих налаштувань немає навмисно: автостворений інвентар завжди отримує
MaxWeight = 0, тобто вагу не враховує. Потрібен ліміт — задайте його на компоненті (у Blueprint або з коду). Як саме — 05 — Операції з інвентарем.
Чому автостворення вимкнене за замовчуванням¶
На відміну від системи квестів, де менеджер потрібен завжди, інвентар зазвичай налаштовують під конкретного персонажа. Мовчазне додавання другого компонента кожній пешці здивувало б більше людей, ніж потішило.
Вмикайте його для прототипів, геймджемів і проєктів, де «у кожного гравця є рюкзак» — просто істина, і редагувати Blueprint заради цього не хочеться.
Вручну розміщений компонент завжди виграє¶
Підсистема спершу перевіряє, чи вже є компонент на акторі, і не чіпає його. Персонаж із налаштованим інвентарем ніколи не отримає другий.
Це працює і в одиночній грі, і в мультиплеєрі¶
Компоненти створюються там, де світ має владу — тобто в одиночній грі та на сервері. Клієнти отримують їх звичайною реплікацією. Один механізм покриває вхід у гру, пізнє під'єднання, respawn, seamless travel і PIE.
Як знайти інвентар із коду¶
Найгірше, що можна зробити, — жорстко зашити місце:
// КРИХКО: зламається, щойно інвентар переїде на PlayerState
UISDemoInventoryComponent* Inv = MyCharacter->FindComponentByClass<UISDemoInventoryComponent>();
Замість цього питайте бібліотеку:
#include "Core/ISDemoInventoryBlueprintLibrary.h"
UISDemoInventoryComponent* Inv = UISDemoInventoryBlueprintLibrary::GetInventoryFor(Actor);
GetInventoryFor шукає в кількох місцях по черзі: на самому акторі, через інтерфейс
IISDemoInventoryInterface, на PlayerState пешки, на пешці контролера. Тому їй можна
передати що завгодно — Character, PlayerController, PlayerState — і отримати
той самий компонент.
Це важливо для тригера підбирання, який не знає, хто саме в нього зайшов.
У Blueprint це вузол Get Inventory For. Аналогічно — Get Equipment For.
Ще коротше¶
Для найчастіших дій навіть шукати компонент не треба:
Give Item To (Actor, Definition, Count) → скільки реально влізло
Take Item From (Actor, Definition, Count) → вдалося чи ні
Get Item Count For(Actor, Definition) → скільки має
Has Item Count (Actor, Definition, Count) → чи вистачає
Повний перелік — 10 — Довідник Blueprint-бібліотеки.
Теги, що йдуть із плагіном¶
Плагін постачає стартовий набір GameplayTags у
Plugins/InventorySystemDemo/Config/Tags/InventoryTags.ini:
Item.Type.*— зброя, броня, витратне, матеріали, валюта, боєприпаси…Item.Property.*— торгується, викидається, квестовий, унікальний…Item.Rarity.*— відCommonдоLegendaryEquipment.Slot.*— руки, голова, тулуб, ноги, аксесуариItem.Stat.*— міцність, заряди, якість, рівень
Це стартовий набір, а не вимога. Видаляйте зайве, додавайте своє
(Item.Type.Vehicle.Hovercraft, Equipment.Slot.Implant.Cortex) — плагін не зашиває
в код жоден із цих тегів.
Єдиний виняток: Item.Stat.Durability і Item.Stat.Charges читаються готовими
фрагментами. Перейменувавши їх у .ini, ви зламаєте міцність і заряди.
Теги реєструються автоматично — плагін сам повідомляє рушію про свою теку з тегами під час запуску. Нічого додавати в
DefaultGameplayTags.iniне треба.
Перевірка, що все працює¶
Натисніть Play і відкрийте консоль (~):
DemoInvItems показати всі типи предметів у проєкті
DemoInvGive <назва> 5 видати собі предмет
DemoInvList показати вміст свого інвентаря
DemoInvOverlay відкрити інспектор
Якщо DemoInvList каже «you have no inventory» — компонент не знайдено. Перевірте, що
він доданий персонажу, або увімкніть автостворення.
Куди далі¶
- Створити свій перший предмет: 03 — Створення предметів
- Навчитися видавати й витрачати предмети: 05 — Операції з інвентарем
- Розібратися, чому це працює в мультиплеєрі: 09 — Мультиплеєр