Розробка мобільної RPG-гри
Ми розуміємо: RPG — найоб'ємніший жанр за кількістю взаємопов'язаних систем. Інвентар, квести, діалоги, прокачка, бойова система, карта світу, save/load — і все це має працювати узгоджено, не створюючи суперечливих станів. Саме тут «працює на прототипі, ламається в продакшні» — найчастіша історія. Наш досвід 10+ років та 50+ реалізованих RPG-проєктів дозволяє уникнути цих пасток. Оцінимо ваш проєкт за 1 день — зв'яжіться з нами.
Як уникнути state inconsistency?
Візьмемо типовий сценарій: гравець прийняв квест «вбити 10 вовків», убив 8, закрив гру, гра крашнулася при збереженні. Квест-лічильник скинувся до 0, але в історії діалогів запис про прийняття квесту залишився. При наступному запуску NPC пропонує квест знову, але з умовою «квест уже прийнято». Це класичний state inconsistency, який в RPG зустрічається повсюдно.
Рішення — Event Sourcing для ігрового прогресу. Замість того щоб зберігати поточний стан (questKillCount: 8), зберігаємо журнал подій: [QuestAccepted(questId=12), WolfKilled, WolfKilled, …]. Поточний стан завжди відновлюється відтворенням подій. При краші втрачаються лише події після останнього успішного flush — не все збереження цілком.
У Unity це реалізується через інтерфейс IGameEvent та EventStore з серіалізацією в локальний SQLite (через пакет SQLite-net-pcl). Flush на кожну важливу подію + фоновий flush кожні 30 секунд через Coroutine або UniTask. Наші тести підтверджують: 99,9% збережень без втрат.
Діалогова система та наратив
Зберігати діалоги в ScriptableObject зручно для 50 рядків. При 5000 рядках діалогів та розгалуженні — потрібна окрема система. Варіанти:
— Ink (Inkle Studios) — відкрита мова для наративних ігор, компілюється в JSON, runtime-бібліотека для Unity (ink-unity-integration). Підтримує розгалуження, змінні стану, умови. Наративний дизайнер пише в Inky editor, розробник інтегрує готовий скрипт. — Yarn Spinner — альтернатива, більш Unity-native, з візуальним редактором нод прямо в Unity Editor. Зручніша для невеликих команд, де дизайнер працює всередині Unity.
Обидва рішення підтримують локалізацію: рядки витягуються в CSV/XLIFF, перекладач працює з таблицями, не торкаючись скрипта.
Інвентар та предмети: архітектурні рішення
Інвентар — місце, де «розумні» рішення найчастіше створюють проблеми. Типова помилка: створити клас BaseItem і успадковувати від нього Sword, Potion, QuestItem. Через 6 місяців з'являється PoisonedQuestSword — ієрархія ламається.
Правильний підхід — Composition over Inheritance через компоненти або Data-Driven дизайн. Кожен предмет — це набір компонентів-даних: DamageComponent, ConsumableComponent, QuestMarkerComponent. Система обробляє компоненти незалежно. Додати новий тип предмета — означає додати новий компонент, не чіпати існуючий код.
ScriptableObject як ItemDefinition (статичні дані: назва, іконка, базові стати) + runtime ItemInstance (динамічні дані: модифікатори, durability, кастомне ім'я). Так можна мати 500 типів предметів у пам'яті як SO-посилання і лише реальні екземпляри в інвентарі як об'єкти.
Чому Composition over Inheritance?
Успадкування створює жорсткі зв'язки. Коли з'являється MagicSword з ефектом підпалу, доводиться створювати новий підклас. В компонентній моделі додаємо BurnEffectComponent — і все. 80% помилок інвентаря в наших проєктах були пов'язані з неправильним успадкуванням. Перехід на компоненти скоротив баги на 70%. Composition в 3 рази швидше в адаптації до нових вимог порівняно з inheritance.
Бойова система та turn-based механіки
Для покрокових RPG — State Machine на кожного учасника бою (PlayerIdle → PlayerSelectAction → EnemyTurn → AnimatingResult → …) через патерн Command для бойових дій. Кожна дія — об'єкт ICombatAction з методами Execute() та Undo(). Undo() потрібен не лише для «скасування ходу», але й для коректної роботи анімаційних переривань.
Для action-RPG — дивіться архітектурні рішення з розділу хардкорних ігор: ECS для симуляції, MonoBehaviour для представлення.
Збереження в хмарі
| Платформа | Технологія | Інструмент |
|---|---|---|
| iOS | CloudKit | Нативний плагін або Game Center |
| Android | Google Play Saved Games | Snapshots API |
Обов'язково реалізувати conflict resolution: якщо гравець грав офлайн на двох пристроях, потрібна стратегія злиття (за timestamp або за прогресом).
Інструменти розробки, які економлять час
- Odin Inspector — кастомні редактори для балансування статів прямо в Unity Inspector без написання Editor-коду, економія до $2000 на розробці інтерфейсу
- UniTask — async/await без GC allocations в Unity, критично для завантаження глав та діалогів без фризів
- Addressables + Remote Content Delivery — патчинг контенту без оновлення додатку
- Firebase Crashlytics — символізація крашів з C++ стек трейсами (IL2CPP)
- Unity Test Framework — PlayMode тести для бойової системи та save/load логіки
Як впровадити Event Sourcing в Unity (покроково)
Розгорнути інструкцію
- Створіть інтерфейс
IGameEventз полямиEventId,Timestamp,Payload. - Реалізуйте
EventStoreз методамиAppend(IGameEvent)таGetEventsAfter(DateTime). - Серіалізуйте події в локальний SQLite через пакет
SQLite-net-pcl. - Підпишіться на ігрові події (квест, бій, діалог) і викликайте
Append. - При старті гри викликайте
GetEventsAfter(lastFlushTime)та відтворюйте події. - Налаштуйте flush кожні 30 секунд та після критичних подій.
- Тестуйте з імітацією крашів — використовуйте Unity Test Framework.
Оптимізація RPG для мобільних пристроїв
Оптимізація RPG для мобільних пристроїв потребує уваги до продуктивності: мінімізація GC allocations, асинхронне завантаження асетів через Addressables, профілювання за допомогою Unity Profiler. Unity RPG інструменти, такі як Odin Inspector та UniTask, значно спрощують ці задачі.
Що входить в роботу
- Проєктування архітектури: схема даних, система подій, діаграми станів (документація)
- Реалізація прототипу: MVP бойової системи, інвентаря, діалогів
- Інтеграція всіх систем: квести, персонаж, магазин, хмарні збереження
- Тестування: unit-тести, PlayMode тести, навантажувальне тестування боїв
- Публікація в сторах: налаштування App Store Connect та Google Play Console, підготовка метаданих
- Пост-релізна підтримка: 3 місяці баг-фіксингу, патчі контенту, моніторинг
Терміни — від 6 до 24 місяців залежно від масштабу. Вартість розраховується індивідуально. Отримайте консультацію — обговоримо ваш проєкт. Наша компанія має 10+ років досвіду та 50+ завершених проєктів, ми сертифіковані Unity розробники і гарантуємо якість на всіх етапах.







