AR-игры с геопозиционированием: от прототипа до релиза
Pokémon GO собрал более 6 млрд долларов. Механика проста: реальный мир становится картой, GPS определяет позицию игрока, AR-камера показывает персонажей поверх реального окружения. Повторить это технически — нетривиальная задача: требуется работающий стек из точного позиционирования, рендера AR-контента, серверной игровой логики и мультиплеерной синхронизации. Мы используем ARKit/ARCore, PostGIS, WebSocket и H3-геошардинг для масштабирования. Мы разрабатываем такие игры под ключ: от геймдизайна до публикации в сторах.
Как мы решаем проблему точности геолокации?
CLLocationManager на iOS даёт точность 5–65 метров, FusedLocationProviderClient на Android — 3–20 метров. Для игрового опыта "монстр стоит в 3 метрах" это неприемлемо. Компенсация через ARKit/ARCore World Tracking: алгоритм — GPS даёт грубую позицию, AR-сессия уточняет относительное движение через VIO, при следующем 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.
- На каждом кадре VIO уточняет относительное перемещение.
- При новом GPS-фиксе корректируем world anchor в ARKit/ARCore.
- Если доступен VPS (Visual Positioning Service), уточняем позицию до 10 см.
- Для объектов за 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%.
Background tracking. Для режима "монстр рядом, уведомление" нужен allowsBackgroundLocationUpdates = true и UIBackgroundModes: location. Apple проверяет это при ревью — готовим убедительное обоснование.
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 недель. Полноценная игра с серверной логикой, мультиплеером, PvP-механиками и системой событий — 6–12 месяцев. Стоимость рассчитывается индивидуально после проектирования геймдизайна. Оценим ваш проект за 2 дня — напишите нам, обсудим детали.
Получите консультацию инженера по AR-разработке — мы ответим на любые технические вопросы и поможем выбрать оптимальную архитектуру.
Подробнее о VIO и ARKit — документация Apple, о геошардинге — H3 Uber.







