Розробка систем прогресування в іграх: XP, навички, метапрогресування

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

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

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

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

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

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

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

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

Ми розробляємо системи внутрішньоігрового прогресування під ключ — від простих рівнів до складних метапрогресувань з сезонами. Один із наших проєктів — RPG з деревом навичок на 50 вузлів — спочатку показав відтік гравців 40% на 15-му рівні. Аналіз показав: експоненціальна крива XP не була збалансована під реальні ігрові сесії. Після коригування формули та впровадження мігруючої схеми даних відтік знизився до 12%. При цьому Retention Day 7 зріс з 25% до 38%.

Наша команда — геймдев-інженери з 8-річним досвідом, які реалізували понад 20 проєктів з прогресуванням для мобільних та PC платформ. Грамотна архітектура прогресування дозволяє заощадити бюджет на наступні ітерації та прискорити запуск. Зі збільшенням retention на 30% окупність настає за 3-6 місяців. Вартість реалізації простої системи XP починається від $5,000, а повне метапрогресування може коштувати $20,000–$50,000 залежно від складності. Оцініть ваш проєкт — напишіть нам.

Як уникнути «стіни» в кривій досвіду

Крива досвіду без математичного обґрунтування

Формула requiredXP = baseXP * level^exponent на перший погляд працює. Але без моделювання реальних сесій отримуємо або «стіну» — рівень, де гравець застряє на 3-4 години — або «провал» — відрізок, який пролітається за 10 хвилин і втрачає цінність. В одному проєкті 60% гравців досягли 15-го рівня, але тільки 20% пройшли 16-й — типовий сигнал стіни.

Правильний підхід: спочатку визначаємо target session count per level (скільки ігрових сесій нормально витрачати на перехід між рівнями), потім підбираємо формулу під цей target. Моделюємо в таблиці, не вгадуємо в коді. Наприклад, для casual-гри target становить 3-5 сесій на рівень, для mid-core — 5-8.

Стан прогресування в неправильному місці

Зберігати прогрес в PlayerPrefs — це не архітектура, це тимчасове рішення, яке стає постійним. PlayerPrefs не підтримує версіонування схеми: при зміні структури даних старі збереження ламаються. Коли у гри 50 000 користувачів, це катастрофа — втрачаємо до 30% активної бази.

Правильна схема: ProgressionData як C# клас з явною версією схеми, серіалізація в JSON, зберігання через PlayFab Player Data API або власний API. При завантаженні — перевірка версії та міграція даних через MigrationManager з ланцюжком міграцій v1→v2→v3.

Чому PlayerPrefs не підходить для прогресування?

PlayerPrefs — це не реляційна база, а key-value сховище без транзакцій. Наш підхід до версіонування схеми даних кращий за зберігання в PlayerPrefs в 10 разів: жодного втраченого збереження за 2 роки експлуатації на 300 000 гравців.

Критерій PlayerPrefs PlayFab Cloud Власний бекенд
Версіонування Немає Вбудовано (версія схеми) Реалізується
Атомарність Немає CloudScript послідовно Транзакції SQL
Масштабування Немає Автоматичне Вимагає DevOps

Race conditions в мультиплеєрі

При одночасних запитах на нарахування досвіду (завершення матчу + daily bonus + achievement unlock в один момент) без атомарності отримуємо неконсистентний стейт. PlayFab CloudScript виконує операції послідовно для одного гравця — це вбудований захист. На власному бекенді — транзакції в PostgreSQL з SELECT ... FOR UPDATE. В одному проєкті це скоротило десинки на 90%.

Архітектура системи прогресування

Розділення даних та логіки

ProgressionConfig ScriptableObject містить незмінні дані: формули розрахунку XP, таблиці нагород за рівні, дерево навичок. Це налаштовується геймдизайнером без зміни коду.

ProgressionState — поточний стейт гравця: поточний рівень, накопичений XP, розблоковані навички, виконані досягнення. Тільки серіалізовані дані, жодних посилань на Unity-об'єкти.

ProgressionManager — сервіс-посередник: приймає події з геймплею (вбив ворога, виконав квест, знайшов предмет), обчислює зміни стейту, генерує події для UI (level up!, навичка розблокована).

Таке розділення дозволяє тестувати логіку прогресування unit-тестами без запуску Unity. В одному проєкті покриття тестами склало 85%, що скоротило час QA на 40%.

Як побудувати дерево навичок без головного болю?

Дерево навичок — це граф з направленими ребрами. Вузол — SkillNode, ребро — залежність (prerequisites). Реалізуємо як Dictionary<string, SkillNode> з явними списками залежностей.

Система Stat Modifier: кожна навичка додає модифікатор з типом (flat, percent additive, percent multiplicative) до потрібного стату. Фінальне значення обчислюється при запиті через CalculateFinalValue(), а не зберігається. Це автоматично обробляє додавання та зняття модифікаторів. Для активних навичок використовуємо Command Pattern: кожна навичка — об'єкт з методами Execute(), CanExecute(), GetCooldownProgress(). Cooldown керується централізовано через AbilitySystem.

Метапрогресування (roguelike-патерн)

Постійний прогрес між ранами — окремий шар даних. Розблокування між ранами (стартові бонуси, нові персонажі, ігрові режими) зберігаються окремо від прогресу всередині рани, який скидається при смерті. Реалізація: дві структури даних — MetaProgressionState (постійний, CloudSave) і RunState (тимчасовий, LocalSave/InMemory). RunState ініціалізується з MetaProgressionState при старті рани + застосовуються ран-специфічні модифікатори від вибраних перків.

Аналітика прогресування

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

Метрика Цільове значення Індикатор проблеми
Level Distribution <30% гравців на одному рівні Стіна
Time per level Зростання ≤15% між рівнями Скачок >50%
Skill usage rate Жодна навичка >40% вибору Дисбаланс дерева
Churn by level <5% на рівні Рівень-вбивця

Збираємо через Firebase Analytics з custom events: level_up, skill_unlocked, achievement_completed. Параметри події — мінімальний набір даних для сегментації: player_level, session_count, monetization_segment. В одному проєкті аналітика виявила, що 70% відтоку відбувається на 12-му рівні через неправильно налаштовану криву XP — після коригування retention виріс на 22%.

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

Як ми впроваджуємо прогресування за 5 кроків

  1. Аналіз цільової аудиторії та ігрових механік (2-3 дні) — визначаємо, які метрики утримання критичні.
  2. Проектування економіки прогресування (3-7 днів) — таблиця цільових сесій, формули XP, структура нагород. Обов'язково узгоджується з монетизаційною моделлю.
  3. Архітектура та бекенд (1-2 тижні) — схема даних, API endpoints або PlayFab налаштування, міграційна стратегія.
  4. Реалізація клієнта (1-3 тижні) — ProgressionManager, UI (XP-бар, level-up анімація, skill tree екран), інтеграція з геймплейними системами.
  5. Балансування (ongoing) — перша ітерація після плейтестів майже гарантовано потребує коригування формул. Закладаємо в план 2-3 ітерації.
Тип системи Приблизні терміни
Прості рівні + XP 3-7 днів
XP + дерево навичок 2-4 тижні
Повна мета-прогресування (roguelike) 3-6 тижнів
LiveOps прогресування + сезони 1-2 місяці
Чек-лист типових помилок
  • Крива XP не прив'язана до цільових сесій — перерахуйте формулу.
  • PlayerPrefs для збереження — замініть на версіонований JSON у хмарі.
  • Немає перевірки атомарності в мультиплеєрі — додайте транзакції.
  • Дерево навичок без бафів через StatModifiers — реалізуйте систему модифікаторів.
  • Метапрогресування та прогресування рани змішані — розділіть структури даних.

Що входить в роботу

  • Архітектурна документація та схеми даних
  • Робочий код ProgressionManager, SkillTree, MetaProgression
  • Unit-тести всіх ключових сценаріїв
  • Інтеграція з аналітикою (Firebase, Unity Analytics)
  • Інтеграція з бекендом (PlayFab, власний сервер)
  • UI-компоненти (XP bar, skill tree, level-up ефекти)
  • Навчання команди замовника
  • Підтримка 2 місяці після релізу

Порівняно з типовими рішеннями, наша система прогресування в 3 рази ефективніша за стандартні криві XP і на 40% швидше впроваджується. Зв'яжіться з нами для оцінки вашого проєкту. Ми підберемо оптимальне рішення під ваш бюджет та терміни. Отримайте консультацію — проаналізуємо вашу поточну систему та запропонуємо план покращень.

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

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

Перший біль: вам здається, що керування «дубове», а чому — незрозуміло. Найчастіше проблема не в коді, а у відсутності 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 гарантують дотримання термінів.