Реалізація 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 інтерпретує як hand tracking.
Рішення через 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 тижні |
Вартість розраховується після детального обговорення механік.







