Реализация AR-игровой механики в мобильном приложении
AR-игры — не просто 3D-объекты на экране. Это физика, взаимодействие с реальным миром, управление жизненным циклом сцены и работа в условиях, когда пользователь двигается, перекрывает камеру рукой, и ARKit теряет трекинг в самый неподходящий момент.
Любая механика, которая выглядит просто в 2D или 3D-игре, в AR требует переосмысления.
Физика в AR: RealityKit vs SceneKit vs собственная
RealityKit — первый выбор для новых проектов. PhysicsBodyComponent + CollisionComponent дают нативную физику через ARKit's scene understanding:
var physicsBody = PhysicsBodyComponent(massProperties: .default, material: nil, mode: .dynamic)
physicsBody.isAffectedByGravity = true
entity.components[PhysicsBodyComponent.self] = physicsBody
var collision = CollisionComponent(shapes: [.generateBox(size: entity.visualBounds(relativeTo: nil).extents)])
entity.components[CollisionComponent.self] = collision
С включённым arView.environment.sceneUnderstanding.options = [.physics] AR-объекты корректно взаимодействуют с реальными поверхностями. Мяч катится по реальному столу, коробка стоит на реальной полке.
Проблема RealityKit — ограниченный контроль. Нет доступа к отдельным шагам физического движка, нет кастомных force generators. Для простых механик — достаточно. Для сложной игровой физики (ragdoll, fluid simulation, rope physics) — нужен SceneKit + PhysicsWorld или Unity с AR Foundation.
Управление в AR: жесты vs контроллер
Tap для размещения, pinch для масштаба, rotation — стандарт. Но в AR жесты конкурируют с движением камеры. Пользователь хочет повернуть объект — ARKit интерпретирует как трекинг руки.
Решение через UIGestureRecognizer с shouldRequireFailure(of:): tap распознаётся только если swipe не начался. Для rotation — UIPanGestureRecognizer с минимальным смещением в 20 поинтов перед активацией, чтобы случайное движение камеры не триггерило вращение.
Отдельная механика — «прицеливание» через центр экрана вместо тапа. В шутерах и стратегиях удобнее: raycast из arView.center каждый кадр, объект под прицелом подсвечивается, действие — по кнопке. Реализуется через ARView.raycast(from:allowing:alignment:) в CADisplayLink callback.
Самые частые проблемы AR-игровой механики
Потеря трекинга во время геймплея. ARKit переходит в .limited tracking state — объекты «плывут». Для AR-игр это катастрофа: враг телепортируется на 30 см, мяч проходит сквозь стену. Стратегия: при .limited «замораживаем» физику, показываем overlay «Наведите камеру на поверхность», возобновляем после .normal. Не прерываем игровой цикл — только паузируем физику.
AR-объекты за пределами видимости. Игрок поворачивается, AR-враг за спиной продолжает двигаться и атаковать. Нужна frustum culling не для рендеринга (ARKit делает это сам), а для игровой логики: AI врагов вне viewport может работать упрощённо или паузироваться.
Spawning на неровных поверхностях. Raycast возвращает нормаль поверхности через ARRaycastResult.worldTransform — четвёртый столбец матрицы даёт точку, X/Y/Z — ориентацию. Если поверхность наклонена под 30°, спавненный объект наклоняется вместе с ней. Для игр с «плоскими» объектами (жетоны, фишки) фиксируем вертикаль: берём только Y из нормали, строим transform с up = (0,1,0).
Кейс из практики
Мобильная AR-стратегия: башни, враги, реальный стол как карта. 6 типов юнитов, pathfinding по меш-поверхности. Главная проблема: ARMeshAnchor обновляется асинхронно — пока mesh перестраивается, pathfinding-граф устаревает. Решение: граф навигации обновлялся каждые 3 секунды на background thread через GCD, а юниты использовали закешированный граф. Юнит в процессе движения проверял коллизию с текущим мешем через raycast — так ловили ситуации «меш изменился, юнит идёт сквозь стену».
FPS держался на 60 на iPhone 13. На iPhone 11 проседал до 45 при 6+ юнитах. Решение: LOD для удалённых юнитов (упрощённые меши), отключение теней за пределами 0.5 метра.
Что входит в работу
- Физика AR-объектов с взаимодействием с реальными поверхностями (RealityKit / SceneKit)
- Система управления: жесты, прицеливание, UI-кнопки
- Игровой цикл с обработкой потери ARKit трекинга
- AI и pathfinding по AR-поверхностям
- LOD-оптимизация для поддержки устройств от iPhone 11
- Тестирование в условиях реального освещения
Сроки
| Механика | Сроки |
|---|---|
| Простые AR-мини-игры (tap, shoot) | 2–4 недели |
| Стратегия / tower defense с AI | 8–14 недель |
| Полноценный AR-шутер с сетевой игрой | 16–24 недели |
Стоимость рассчитывается после детального обсуждения механик.







