Мобільні симулятори: офлайн-прогресія, фізика, агенти
Нам часто замовляють мобільні симулятори — від фермерських таймерних ігор до повноцінних фізичних симуляцій транспорту чи будівництва. Об'єднує їх одне: складні взаємопов'язані системи, які мають працювати узгоджено та забезпечувати «живе» відчуття світу навіть при закритому застосунку. Ми розробляємо такі проекти під ключ: від концепту до релізу в сторах.
Як забезпечити офлайн-прогресію без втрати даних?
Головна технічна особливість симуляторів — offline progression. Гравець повертається через 8 годин, і за цей час мали відбутися події: дозріли культури, виробилися ресурси, завершилися виробничі ланцюжки.
Наївний підхід — при відкритті гри запустити цикл з кроком deltaTime і порахувати все з моменту останнього збереження. Це працює для простих систем. При складних взаємозалежностях (ресурс A потрібен для виробництва B, B потрібен для C, і у A може закінчитися запас у середині періоду) — потрібна дискретна симуляція з фіксованим тіком.
Реалізація: зберігаємо lastTickTimestamp. При відкритті обчислюємо missedTicks = (now - lastTick) / tickInterval. Запускаємо симуляцію на missedTicks кроків з tickInterval (наприклад, 1 хвилина). Кожен тік — детермінований: застосовуємо виробництво, споживання, події. Обмеження: maxOfflineTicks (наприклад, 8 годин = 480 тіків), решта — втрачається або накопичується в overflow buffer.
| Метод | Складність | Продуктивність | Підходить для |
|---|---|---|---|
| Простий цикл на відкритті | Низька | Висока | Прості лінійні процеси |
| Дискретна симуляція з тіками | Середня | Середня | Взаємозалежні ланцюжки |
| Гібридний (тіки + тригери) | Висока | Низька | Дуже складні системи з event-driven |
Для ігор з ринковою економікою (ціни змінюються кожні 15 хвилин) використовуємо гібридний підхід: тіки для базового виробництва та окремі події для зовнішніх впливів. Це знижує навантаження на процесор на 30% порівняно з повною симуляцією.
Фізика в транспортних та будівельних симуляторах
Для фізичних симуляторів (автобус, кран, дорожнє будівництво) в Unity використовуємо Configurable Joint для складних зчленувань + Rigidbody.AddForceAtPosition для фізично коректного керування. Стандартні WheelCollider хороші для базової автомобільної фізики, але для нестандартних транспортних засобів їх limitations швидко проявляються.
Важливо: фізичні симулятори з великою кількістю Rigidbody (30+) на сцені вимагають налаштування Physics.simulationMode. Використання SimulationMode.Script (ручний виклик Physics.Simulate(fixedDeltaTime)) дає точний контроль над порядком кроків — критично коли фізика поєднується з ігровою логікою.
На Android фізика з Vulkan і ARMv8 — значно швидша через NEON SIMD оптимізації в PhysX (приріст продуктивності до 80%). Якщо таргет — low-end Android з OpenGL ES 3.0, обмежуй кількість активних rigidbody через Sleep Threshold та Rigidbody.IsSleeping().
| Параметр | Vulkan / ARMv8 | OpenGL ES 3.0 / ARMv7 |
|---|---|---|
| Швидкість фізики | Висока (NEON SIMD) | Середня (без NEON) |
| Макс. активних Rigidbody | 60+ | 30 |
| Рекомендований simulationMode | Automatic або Script | Script з ручним керуванням |
Чому агентна модель підходить для менеджмент-симуляторів?
Для симуляторів типу «тайкун» (ресторан, аеропорт, лікарня) — агентна модель. Кожен NPC — автономний агент з Behaviour Tree або Utility AI. Unity NavMesh Agent для переміщення, кастомна система задач для дій (взяти замовлення, принести, прибрати).
При великій кількості агентів (50+) переходимо на ECS-based agents через Unity DOTS: позиції та стани в NativeArray, шлях обчислюємо через Job System. Unity DOTS — офіційний пакет для роботи з ECS. NavMesh Agents на DOTS поки в preview, але для 2D ізометричних симуляторів своя тайлова навігація через A* Pathfinding Project (Aron Granberg) дає кращий результат — у 2-3 рази швидше за NavMesh.
Приклад: поведінка офіціанта в симуляторі ресторану
Агент: офіціант. Behaviour Tree: - Прийняти замовлення (перейти до столу, отримати замовлення) - Доставити замовлення на кухню (перейти до кухні, передати замовлення) - Забрати готові страви (перейти до роздачі, взяти піднос) - Подати страви клієнтам (перейти до столу, віддати піднос) - Прибрати посуд (перейти до столу, забрати тарілки) Паралельно: якщо вільний — прийняти нове замовлення. Якщо клієнт пішов без оплати — викликати менеджера.Як налаштувати агентів: покрокова інструкція
- Визначте типи агентів (офіціант, кухар, відвідувач).
- Створіть Behaviour Tree для кожного типу з Fallback/Sequence/Parallel.
- Налаштуйте NavMesh або тайлову навігацію.
- Додайте систему задач (команди) через чергу.
- Оптимізуйте кількість активних агентів: не більше 30 на low-end пристроях, до 100 на high-end.
Збереження складного стану
Симулятори з сотнями об'єктів та їх станами — це сотні кілобайт даних збереження. JsonUtility Unity не справляється зі складними графами об'єктів. Використовуємо Newtonsoft.Json (com.unity.nuget.newtonsoft-json) з кастомними конвертерами або MemoryPack для бінарної серіалізації (швидше в 5–10 разів для великих обсягів). Newtonsoft.Json — де-факто стандарт для .NET.
Автозбереження через UniTask.Delay на фоновому потоці — серіалізація в Task.Run, запис на диск у UniTask.SwitchToMainThread мінімальним способом. Креш під час запису не має пошкодити існуюче збереження — пишемо у тимчасовий файл, потім атомарно перейменовуємо.
Що входить у роботу
- Концепт-документ з описом архітектури та метрик.
- Прототип ключової механіки (офлайн-симуляція, фізика, агенти).
- Повний код з коментарями та README.
- Інструкція по збірці (build для iOS/Android).
- Підтримка після релізу — баг-фіксинг, оптимізація, оновлення під нові версії ОС.
Терміни та вартість
Терміни розробки: від 4 місяців для простих симуляторів до 15 місяців для складних проектів з фізикою. Вартість розраховується індивідуально — зв'яжіться з нами, щоб ми оцінили ваш проект за 2 дні безкоштовно. Середня вартість проекту — від $15,000 до $50,000.
Ми займаємося мобільною розробкою більше 7 років, випустили 15 проектів в App Store та Google Play. Гарантуємо якість та супровід після релізу. Звертайтеся — обговоримо деталі вашого симулятора. Отримайте консультацію по вашому проекту прямо зараз.







