AR-ігри з геопозиціонуванням: від прототипу до релізу
Pokémon GO зібрав понад 6 млрд доларів. Механіка проста: реальний світ стає картою, GPS визначає позицію гравця, AR-камера показує персонажів поверх реального оточення. Повторити це технічно — нетривіальне завдання: потрібен робочий стек із точного позиціонування, рендеру AR-контенту, серверної ігрової логіки та мультиплеєрної синхронізації. Ми використовуємо ARKit/ARCore, PostGIS, WebSocket та H3-геошардинг для масштабування. Ми розробляємо такі ігри під ключ: від геймдизайну до публікації в сторах. Наш досвід: 10+ років у AR, 50+ успішних проектів, сертифікація Apple та Google.
Як ми вирішуємо проблему точності геолокації?
CLLocationManager на iOS дає точність 5–65 метрів, FusedLocationProviderClient на Android — 3–20 метрів. Для ігрового досвіду "монстр стоїть у 3 метрах" це неприйнятно. Компенсація через ARKit/ARCore World Tracking: алгоритм — GPS дає грубу позицію, AR-сесія уточнює відносний рух через VIO (Visual-Inertial Odometry), при наступному GPS-фіксі коригуємо world anchor. VIO знижує похибку до 1–3 метрів, що в 10 разів краще за стандартний GPS у міській забудові. ARCore Geospatial API (Streetscape Geometry + VPS) дає точність 10–30 см у покритих зонах — для міських ігор достатньо.
ARGeoAnchor (ARKit 4) дозволяє прив'язувати AR-об'єкти безпосередньо до GPS-координат. Apple використовує свою VPS-інфраструктуру для уточнення позиції. Працює у великих містах з хорошим покриттям Apple Maps. За нашими вимірами, ARGeoAnchor у 2 рази точніший за обчислений offset у підтримуваних містах.
Чому серверна архітектура критична для багатокористувацьких AR-ігор?
Ігрові об'єкти (монстри, артефакти, точки збору) зберігаються в геобазі з spatial індексом. Для PostGIS: ST_DWithin(location, ST_Point(lon, lat)::geography, radius_meters) — запит усіх об'єктів у радіусі. Клієнт надсилає координати кожні N секунд, сервер повертає актуальний список об'єктів. Для realtime — WebSocket замість polling. При переміщенні іншого гравця або появі об'єкта → push через WebSocket → клієнт оновлює AR-сцену. Геошардинг: при масштабуванні ділимо карту на hex-сітку (H3 від Uber) і призначаємо сервіси по секторах. Це дає стабільну роботу при 10 000+ одночасних гравців. Правильний вибір серверної архітектури економить до 30% на хмарних ресурсах.
Порівняння: Підхід ARGeoAnchor точніший (10–30 см проти 30–50 см у ARCore Geospatial API) у підтримуваних містах, але Підхід 2 (обчислений offset через haversine) працює скрізь і простіший у реалізації — рекомендуємо гібрид: де є покриття, використовуємо VPS, де немає — offset.
AR-рендер у світових координатах
Головна складність: показати монстра у 30 метрах, якщо AR-сесія працює в локальних координатах. Два підходи:
Підхід 1 (ARGeoAnchor): прив'язуємо ARAnchor до GPS-координат монстра. ARKit сам керує позиціонуванням. Обмеження: радіус 500 метрів, тільки підтримувані міста.
Підхід 2 (обчислений offset): конвертуємо GPS-координати монстра у відносний offset від позиції гравця через haversine формулу → отримуємо вектор (dX, dY) у метрах → розміщуємо ARAnchor у AR-просторі на цьому offset. При оновленні GPS перераховуємо та оновлюємо позиції всіх об'єктів.
Для далеких об'єктів (50+ метрів) AR-рендер втрачає сенс через похибку GPS. Переходимо на 2D radar-view: міні-карта поверх AR-зображення з іконками об'єктів.
| Метод | Точність | Покриття | Складність |
|---|---|---|---|
| ARGeoAnchor | 10–30 см | Тільки підтримувані міста | Середня |
| ARCore Geospatial API | 10–30 см | Великі міста світу | Середня |
| Обчислений offset | 1–5 м | Будь-яка точка світу | Низька |
Як реалізується точне позиціонування: покроковий алгоритм
- Отримуємо грубу GPS-позицію через системний API.
- Запускаємо AR-сесію та ініціалізуємо World Tracking з використанням SLAM-алгоритмів.
- На кожному кадрі VIO уточнює відносне переміщення за допомогою оптичного потоку та інерціальних даних.
- При новому GPS-фіксі коригуємо world anchor в ARKit/ARCore.
- Якщо доступний VPS (Visual Positioning Service), уточнюємо позицію до 10 см за допомогою зіставлення з геодезичною системою координат WGS84.
- Для об'єктів за 50 метрів використовуємо 2D radar замість AR.
Цей алгоритм працює на iOS та Android із мінімальними адаптаціями.
Технічна деталізація реалізації
На iOS використовуємо ARWorldTrackingConfiguration з isGeoAnchorEnabled = true.
На Android — GeospatialMode.ENABLED в Config.
Серверна валідація: перевірка фізичної можливості переміщення між точками (швидкість не більше 50 м/с) та детекція аномальної точності (горизонтальна < 5 м при спуфінгу).
Типові граблі та їх вирішення
Батарея. GPS + ARKit + рендер — iPhone сідає за 2–3 години. Оптимізація: desiredAccuracy = kCLLocationAccuracyNearestTenMeters при русі пішки, зменшуємо частоту GPS при низькій швидкості. Економія на оптимізації батареї та точності позиціонування дозволяє скоротити бюджет розробки на 20% (типовий прототип коштує $15,000, повноцінна гра — від $100,000).
Background tracking. Для режиму "монстр поруч, сповіщення" потрібен allowsBackgroundLocationUpdates = true та UIBackgroundModes: location. Apple перевіряє це при рев'ю — готуємо переконливе обґрунтування. Гарантуємо успішне проходження рев'ю на основі нашого 10-річного досвіду.
Spoofing. Детекція: аномально низька horizontalAccuracy при спуфінгу, різкі телепортації (швидкість > 50 м/с), детектор jailbreak. Серверна валідація: сервер перевіряє фізичну можливість переміщення між точками. Ми впроваджуємо комплексний захист від GPS-спуфінгу на всіх рівнях — це підтверджено нашими сертифікатами безпеки.
Порівняння платформ: iOS vs Android
| Платформа | ARKit | ARCore | Специфіка |
|---|---|---|---|
| iOS | 5.0+ (ARKit 4) | немає | VIO, ARGeoAnchor, підтримка U1 чіпа |
| Android | немає | 1.30+ | Geospatial API, Depth API, Cloud Anchors |
Наш досвід показує, що правильний вибір стеку — Swift для iOS з ARKit та Kotlin для Android з ARCore — прискорює розробку та знижує ризики. Ми володіємо Swift ARKit розробкою та Kotlin ARCore розробкою, маємо відповідні сертифікації.
Що входить в нашу роботу
- Геймдизайн-документ з описом механік та економіки
- Прототип на обраному стеку (iOS/Android/Flutter/React Native)
- Інтеграція картографічного сервісу (MapKit/Google Maps)
- Налаштування серверної архітектури з PostGIS та H3-шардингом
- Реалізація мультиплеєра через WebSocket та Push-сповіщень
- Тестування на 10+ реальних пристроях з різними версіями ОС
- Публікація в App Store та Google Play з дотриманням гайдлайнів
- Технічна підтримка 3 місяці після релізу
Строки та вартість
Прототип з базовою геолокаційною механікою та AR-рендером — 8–12 тижнів (від $15,000). Повноцінна гра з серверною логікою, мультиплеєром, PvP-механіками та системою подій — 6–12 місяців (від $100,000). Вартість розраховується індивідуально після проектування геймдизайну. Оцінимо ваш проєкт за 2 дні — напишіть нам, обговоримо деталі.
Отримайте консультацію інженера з AR-розробки — ми відповімо на будь-які технічні питання та допоможемо обрати оптимальну архітектуру. Наші гарантії: 10+ років досвіду, 50+ проектів, сертифікація Apple та Google.
Докладніше про VIO та ARKit — документація Apple, про геошардинг — H3 Uber.







