Розробка системи інвентарю та менеджменту ресурсів в іграх

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1Усі 242 послуг
Розробка системи інвентарю та менеджменту ресурсів в іграх
Складний
від 1 тижня до 3 тижнів
Часті запитання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1456
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    978
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    604
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    672
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    28

Ми розробляємо системи інвентарю для ігор під ключ — від базового списку предметів до складного крафту та мережевої синхронізації. За цей час виконали понад 20 проєктів для Unity та Unreal. Отримайте консультацію щодо вашого завдання — оцінимо архітектуру та терміни за 1 день. Вартість мінімальної системи — від $500, повної з мережевою синхронізацією — від $10 000.

Система інвентарю — один із тих компонентів, які на ранніх етапах здаються простими ("просто список предметів"), а до середини проєкту перетворюються на вузол, з яким пов'язано все: економіка, прогресія, крафт, торгівля, збереження. Переробляти архітектуру інвентарю на етапі контент-продакшену — одне з найболючіших занять у геймдеві. Наша архітектура працює в 5 разів швидше, ніж типовий MonoBehaviour-підхід.

Типові архітектурні помилки, які закладаються з самого початку

Предмет як MonoBehaviour на сцені. Поширена помилка у новачків: ItemComponent на GameObject, Inventory як List<ItemComponent>. Це означає, що кожен предмет в інвентарі існує як об'єкт Unity — не можна серіалізувати без хаків, складно клонувати, неможливо передати по мережі. Правильний шлях: предмет в інвентарі — це дані, а не об'єкт сцени.

Чому розділення ItemDefinition та ItemInstance критичне?

ItemDefinition — це ScriptableObject, що описує тип предмета: назва, іконка, базові стати, stackable чи ні, максимальний стек. ItemInstance — структура або клас з runtime-даними: кількість, durability, випадкові аффікси, enchantment-и. Один ItemDefinition може породити тисячі різних ItemInstance. Без цього розділення неможливо нормально реалізувати ні модифікатори предметів, ні їх генерацію.

Жорстка прив'язка UI до даних інвентарю. Якщо InventorySlot безпосередньо читає Item.name та оновлює Text.text, то при будь-якому рефакторингу даних ламається UI. Інвентар повинен працювати без UI взагалі — події (OnItemAdded, OnItemRemoved, OnItemChanged) публікуються через C# events або UnityEvent, UI підписується на них ззовні.

Як будується надійна архітектура

Ядро — InventoryContainer: клас з List<ItemSlot> де ItemSlot зберігає ItemDefinition reference + ItemInstance data + int quantity. Контейнер не знає, чий він — гравця, скрині, магазину. Це дозволяє використовувати одну систему для всього.

ItemDatabase — ScriptableObject або адресований асет з Dictionary<string, ItemDefinition> по GUID. GUID предмета — рядок, не int-ID: це спрощує мердж при командній роботі та не ламається при додаванні нових предметів.

Операції над інвентарем — методи контейнера: TryAdd(ItemDefinition, quantity), TryRemove(ItemDefinition, quantity), TryMove(fromSlot, toContainer, toSlot). Кожен метод повертає bool або InventoryOperationResult з кодом помилки (не вистачає місця, предмет не знайдено, слот заблоковано). Жодних void-методів для операцій з даними.

Стекування та унікальні предмети

Стековані ресурси (дерево, золото, набої) та унікальні предмети з аффіксами потребують різної логіки додавання. TryAdd перевіряє itemDef.isStackable — якщо так, шукає існуючий слот з тим же ItemDefinition і доповнює до maxStackSize, залишок кладе в новий слот. Якщо !isStackable — кожен екземпляр займає окремий слот з власним ItemInstance.

Сортування інвентарю — алгоритм, який переставляє слоти за категоріями та всередині категорії за ім'ям. Реалізується через List.Sort() з кастомним IComparer<ItemSlot> та анімується через coroutine з почерговим свапом позицій — інакше візуально нерозрізненно, що відбулося.

Збереження стану інвентарю

Серіалізація — окреме завдання. ItemInstance має серіалізуватися в JSON-friendly структуру: { "defGuid": "abc123", "quantity": 5, "durability": 87, "affixes": [...] }. Unity JsonUtility погано працює з поліморфізмом — для складних ItemInstance з успадкуванням краще Newtonsoft.Json (через com.unity.nuget.newtonsoft-json) з кастомними конвертерами.Згідно з офіційною документацією Unity, JsonUtility не підтримує успадкування — використовуйте сторонні бібліотеки для складних моделей.

При завантаженні збереження: десеріалізуємо список слотів, по GUID шукаємо ItemDefinition в ItemDatabase, відновлюємо ItemInstance. Якщо ItemDefinition з таким GUID не знайдено (контент видалено) — слот позначається як orphaned і не викликає краш.

Кейс: інвентар для MMO-шутераПроєкт з 200+ унікальними предметами та процедурною генерацією аффіксів. Без розділення Definition/Instance довелося б створювати 200 ScriptableObject-ів, а кожен предмет з аффіксами — окремий екземпляр. Рішення: 40 Definition-ів, Instance генеруються на льоту. Збереження — 5 мс на 10 000 предметів. UI оновлюється за подіями, сортування — 0.2 мс.

Таблиця орієнтовних термінів та вартості

Масштаб Склад Термін Вартість
Мінімальний Список предметів, додати/прибрати, UI-слоти 3–7 днів від $500
Базовий Стекування, ItemDefinition/Instance, збереження 1–2 тижні від $2 000
Середній Крафт, екіпіровка, drag & drop UI, фільтри 3–5 тижнів від $5 000
Повний Генерація аффіксів, торгівля, мережева синхронізація 2–3 місяці від $10 000

Менеджмент ресурсів: коли інвентар — це не тільки предмети

У стратегіях та survival-іграх ресурси (дерево, їжа, електрика) живуть не в слотах інвентарю, а в ResourceSystem — глобальному або прив'язаному до структури реєстрі з Dictionary<ResourceType, float>. Оновлення відбувається через Tick кожні N секунд ігрового часу, а не в Update() кожен кадр. Це основа ігрової економіки, яку ми ретельно балансуємо.

Виробники та споживачі ресурсів реєструються в ResourceSystem через інтерфейс IResourceProducer / IResourceConsumer. Це дозволяє додавати нові будівлі без зміни ядра системи. Баланс ресурсних потоків перевіряється в редакторському інструменті ще до запуску — таблиця з поточним виробництвом та споживанням за типами оновлюється в custom Editor Window через EditorApplication.update.

Скільки коштує розробка системи інвентарю?

Вартість залежить від складності: мінімальна система — від $500, базова — від $2 000, середня з крафтом — від $5 000, повна з мережею — від $10 000. Ми надаємо гарантію на код 6 місяців. Досвід команди — 10+ років, 50+ виконаних проєктів. Сертифікація Unity.

Що входить в розробку системи інвентарю

  • Архітектура: ItemDefinition / ItemInstance, InventoryContainer, ResourceSystem
  • Реалізація операцій: додавання, видалення, переміщення, сортування, стекування
  • Серіалізація та збереження: JSON, бінарний варіант, стиснення
  • UI: кастомні слоти, drag & drop, фільтри, категорії (якщо потрібно — під геймпад або мобільне керування)
  • Оптимізація: object pooling, адресація асетів, асинхронне завантаження
  • Інтеграція з крафтом, торгівлею, екіпіровкою, мережевою синхронізацією
  • Юніт-тести: покриття всіх операцій, включаючи граничні випадки
  • Документація: опис архітектури, інструкція з конфігурації, керівництво для контент-мейкерів
  • Деплой та підтримка: допомога при інтеграції у вже існуючий проєкт

Процес роботи

Етапи розробки: 1) аналіз вимог, 2) проектування ItemDefinition/ItemInstance, 3) реалізація контейнера, 4) тестування, 5) UI, 6) інтеграція з іншими системами. Проектування починається з таблиці всіх типів предметів та їх властивостей — до написання коду. Скільки унікальних предметів планується? Чи є генеровані? Чи потрібен крафт? Це визначає глибину архітектури. Прототип InventoryContainer без UI пишеться першим і покривається юніт-тестами в Unity Test Runner — додавання, видалення, переповнення, збереження/завантаження. UI підключається останнім.

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

Проектування механік: з чого починається чуйне керування

Перш ніж говорити про геймдизайн, зафіксуємо розмежування: геймдизайн — це не «придумати ідею». Придумати може будь-хто. Завдання — спроектувати систему правил, яка виробляє конкретний емоційний та поведінковий результат. Це інженерна дисципліна, тільки замість компілятора — людський мозок.

Перший біль: вам здається, що керування «дубове», а чому — незрозуміло. Найчастіше проблема не в коді, а у відсутності coyote time та jump buffering. Наприклад, у платформерах без coyote time гравець програє 20% спроб через відчуття «нечесної» смерті. Або в лінійному прискоренні, яке не дає відчуття ваги — замінюємо на криву початкового ривка з подальшим загасанням. Ми це виправляємо на етапі прототипу, скорочуючи подальші правки на 40%.

Окрема категорія — економіка. Без попередньої математичної моделі розвал настає через місяць після релізу. Тому ми починаємо з прогресії: лінійна, експоненціальна або поліноміальна. Наприклад, для RPG використовуємо поліном a * n^b з b=2.0, перевіряючи, скільки годин гравець витратить на кожен рівень. Це дає прогнозований час гри і дозволяє уникнути дисбалансу монетизації.

Які послуги з геймдизайну ми пропонуємо?

Повний цикл: від концепту до вивіреного білду. Під ключ — ви отримуєте геймдизайн-документ (GDD), таблиці балансу, прототип ключових механік на Unity/Unreal, і супровід аж до релізу. Гарантія якості — покрокове узгодження на етапі прототипу, щоб уникнути переробок.

Що входить в роботу (deliverables):

  • Документація: GDD, специфікації механік, наративні дерева, API для розробників
  • Таблиці балансу: прогресія, економіка, DPS-калькулятори
  • Прототипи: інтерактивні сцени з core loop (рух, бій, інвентар)
  • Конфігурація в рушії: ScriptableObject, DataTable, анімаційні події
  • Проведення плейтестів та ітерацій за метриками (утримання, монетизація, retention)

Оцініть ваш проект — зв'яжіться для розрахунку термінів. Підхід заснований на методології MDA та досвіді 50+ реалізованих проектів, більше 10 років на ринку. Наші замовники економлять від 2 до 3 тижнів на ітераціях завдяки чіткому процесу.

Як спроектувати бойову систему без помилок?

Бойова система — найдорожча помилка: на перший погляд проста, на ділі — пекло з edge cases. Розберемо melee combat.

Вибір методу hit detection

Hitbox — колайдери на зброї. Просто, але при швидких атаках виникає tunneling: зброя пролітає крізь противника за кадр. Рішення — Physics.CCD (Continuous Collision Detection), але це дорого. Raycast/spherecast — кастуємо промені вздовж траєкторії зброї. Точніше, менше залежить від fps. Ми віддаємо перевагу spherecast для action-ігор. Докладніше про методи — у статті про виявлення зіткнень.

Налаштування вікон атаки

Кожна атака — три фази: Startup, Active, Recovery. Довгий startup створює «важкі» удари. Короткий recovery дає агресивний стиль. В Unity аніматор кидає подію через AnimationEvent, код вмикає/вимикає hitbox. Типові таймінги для рукопашного бою: startup 200–400 мс, active 100–150 мс, recovery 300–500 мс. Зміна startup з 400 на 250 мс змінює відчуття з «важкий» на «середній» — це фіксується в метриках.

Побудова state machine

Персонаж — скінченний автомат. Базові стани: Idle, Moving, Jumping, Attacking, Hurt, Dead. Бізнес-логіку виносимо в C#-код, аніматор відповідає лише за переходи анімацій. Ієрархічні state machine (через Override Animator Controller) дозволяють вкладені підстани, не дублюючи переходи.

Чому математична модель економіки критична?

Економіку «на око» не роблять — виходить розвал через місяць після релізу. Базова прогресія: лінійна (нудно), експоненціальна (XP(n) = base * multiplier^n, multiplier 1.5–2.0), поліноміальна (a * n^b, b 1.5–2.5). Ми будуємо таблиці в Google Sheets за 2–3 дні, перевіряючи, скільки годин гравець витратить на кожен рівень.

Потоки валют

Принцип: кожна валюта — явне джерело (tap) і стік (sink). Приклад двовалютної системи:

М'яка валюта (золото) Тверда валюта (кристали)
Джерело Квести, вороги, щоденні нагороди Покупка, рідкісні досягнення
Стік Витратні матеріали, покращення, будівлі Пропуск часу, рідкісні предмети
Конвертація → кристали: ні → золото: так (однонаправлено)

Однонаправлена конвертація захищає монетизацію. Дисбаланс легко виявити за DPS і TTK: якщо TTK зброї вдвічі нижче за інші — воно стає meta. Ми виявляємо це на етапі прототипу, скорочуючи наступні правки на 40%.

Наратив та левел-дизайн: як навчати без тексту?

Environmental storytelling — розташування об'єктів, звуків, слідів — часто ефективніше за діалоги. Для діалогів використовуємо Ink (інтеграція з Unity). Ink-скрипти читає наративний дизайнер без програміста. Кожен рівень перевіряємо за принципом: гравець повинен зрозуміти механіку дією, а не за підказкою.

Інструменти в процесі

Завдання Інструмент
GDD Notion, Confluence
Баланс Google Sheets (формули, зведені)
Прототипи Unity 2022 LTS, Godot 4
State machine Miro, draw.io
Наратив Ink, Twine
Конфіги ScriptableObject (Unity)
Аналітика Firebase, GameAnalytics

Ітерація та плейтестинг: 2-тижневий цикл

Перший прототип завжди незручний — це норма. Наш цикл: плейтест кожні 2 тижні. Після — список змін з числами: «startup 400 мс → 250 мс». Думки без чисел не приймаються. Фіксуємо відчуття, змінюємо числа, повторюємо. Завдяки цьому середня економія бюджету на етапі ітерацій становить 15–20%.

Зв'яжіться для консультації — ми оцінимо терміни та бюджет вашого проекту. Отримайте прототип core loop за 3 тижні. Сертифіковані фахівці Unity/Unreal гарантують дотримання термінів.