Skip to content

02 — Підключення

🇬🇧 English | 🇺🇦 Українська

Що потрібно зробити, щоб плагін запрацював у вашому проєкті, і як дістатися до інвентаря з коду.


Встановлення

  1. Скопіюйте теку Plugins/InventorySystemDemo у теку Plugins/ свого проєкту.
  2. Edit → Plugins → Inventory System → увімкнути → перезапустити редактор.
  3. Якщо проєкт має 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 до Legendary
  • Equipment.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» — компонент не знайдено. Перевірте, що він доданий персонажу, або увімкніть автостворення.


Куди далі