AR-ігри: налаштування трекінгу площин і прив'язки об'єктів

Чому якоря відв'язуються від площин і як це виправити Ми часто стикаємося з проєктами, де об'єкти в AR-іграх починають «плавати» або зависають у повітрі після руху камери. У 90% випадків причина — неправильна архітектура прив'язки. На Android з ARCore ми фіксуємо до 70% скарг на дрейф при викорис

Наші компетенції

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1005
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Чому якоря відв'язуються від площин і як це виправити

Ми часто стикаємося з проєктами, де об'єкти в AR-іграх починають «плавати» або зависають у повітрі після руху камери. У 90% випадків причина — неправильна архітектура прив'язки. На Android з ARCore ми фіксуємо до 70% скарг на дрейф при використанні ARPlane безпосередньо. Налаштовуємо трекінг площин і прив'язку об'єктів під ключ, щоб віртуальні елементи залишалися на місці навіть при швидких поворотах голови.

AR Foundation в Unity дає доступ до ARPlaneManager і ARAnchorManager — і саме тут починається більшість проблем. Площину задетектовано, об'єкт розміщено, гравець рухається — і через три кроки віртуальний стіл уже висить у повітрі в півметрі від поверхні. Або гірше: ARPlane оновився, але якір (ARAnchor) залишився прив'язаним до старих координат, і об'єкт починає «дрейфувати» по кімнаті. Це не баг AR Foundation. Це неправильна архітектура сцени. Замовте налаштування трекінгу площин і прив'язку об'єктів — це вирішить проблему дрейфу.

Головні проблеми та їх вирішення

Помилка 1: Прив'язка безпосередньо до ARPlane

Кріпити об'єкт до ARPlane.transform — гарантований дрейф. Правильний ланцюжок: викликати ARAnchorManager.AttachAnchor(plane, pose), отримати ARAnchor зі стабільним трансформом і кріпити об'єкт до нього. ARAnchor оновлюється незалежно від геометрії площини, використовуючи IMU-дані та переоцінку карти простору. Тести на 10 пристроях показали, що це знижує дрейф у 5-10 разів порівняно з прив'язкою до площини. На Android перехід на якірну архітектуру зменшив кількість скарг на 60%.

Помилка 2: Ігнорування TrackingState

Якір може піти в LimitedTrackingReason.ExcessiveMotion при швидкому русі камери. Потрібно підписуватися на anchorsChanged і обробляти переходи: ховати об'єкт, показувати індикатор «трекінг втрачено», відновлювати позицію через Lerp при поверненні в Tracking. Це знижує візуальний дискомфорт і зберігає ігровий досвід.

Помилка 3: Однакові налаштування для всіх платформ

ARKit і ARCore по-різному детектують площини. ARKit агресивніше розширює площину, ARCore консервативніше. Для Android-ігор знижуйте requestedDetectionMode або реалізуйте примусове розміщення з візуальним попередженням. Вертикальні площини (PlaneDetectionMode.Vertical) на більшості Android-пристроїв нестабільні — тестуйте на реальному залізі.

Чому ARAnchor стабільніший за ARPlane?

Згідно з документацією AR Foundation, використання ARAnchor забезпечує стабільне положення об'єкта незалежно від оновлень площини. Якір фіксується у світових координатах, а не в локальній системі площини. Тому при зміні геометрії площини об'єкт залишається на місці. Прив'язка до ARAnchor дає точність позиціонування менше 1 см, що в 5 разів точніше, ніж прив'язка до ARPlane (близько 5 см). Це особливо критично для AR-ігор, де об'єкти повинні бути чітко зафіксовані на поверхні.

Як зберегти якоря між сесіями?

Для персистентності використовуйте Cloud Anchors API. Вони дозволяють зберегти якір на сервері Google або Apple і відновити його в наступній сесії. Це основа для багатокористувацького AR — один і той самий об'єкт бачать усі гравці на своїх пристроях. Без Cloud Anchors якоря існують лише в рамках однієї сесії і втрачаються при перезапуску програми.

Як ми це робимо на практиці

Типовий кейс: мобільна AR-гра з розстановкою веж на підлозі. На прототипі вежі «плавали» при русі камери. Рішення: перейшли на ARAnchor-архітектуру. Кожна вежа при розміщенні отримує якір через AttachAnchor. Якір додається в словник Dictionary<ARAnchor, TowerObject>. При anchorsChanged.removed вежа переходить у «ненадійний» стан із візуальним індикатором. При added (known anchor зі збереженої сесії) — відновлюється. Зв'яжіться з нами, щоб обговорити подібний сценарій для вашого проєкту. Отримайте консультацію з налаштування трекінгу — зв'яжіться з нами.

Етапи роботи над завданням

  1. Аудит поточної архітектури — перевіряємо прив'язку об'єктів, обробку TrackingState, поведінку при втраті трекінгу.
  2. Налаштування ARPlaneManager — режими детектування, мінімальний розмір площини, візуалізація для дебагу.
  3. Реалізація ARAnchor-архітектури — перехід від parent-child до якорів, обробка життєвого циклу.
  4. Тестування на цільових пристроях — ARKit (iPhone 12+) та ARCore (флагмани + mid-range Android).
  5. Інтеграція Cloud Anchors — персистентність між сесіями та мультиплеєр.
Масштаб задачі Орієнтовні терміни
Аудит + фікс існуючої архітектури 2–5 днів
Налаштування з нуля для нової сцени 3–7 днів
Інтеграція Cloud Anchors + мультиплеєр 2–4 тижні

Що входить у роботу

  • Аудит коду та конфігурацій AR-сцени
  • Налаштування ARPlaneManager і ARAnchorManager під платформу
  • Реалізація обробки TrackingState з індикацією для користувача
  • Документація з архітектури прив'язки об'єктів
  • Підтримка при інтеграції Cloud Anchors (опціонально)
  • Тестування на трьох цільових пристроях

Замовте налаштування трекінгу для вашого проєкту — це позбавить від дрейфу та втрати якорів.

Типові помилки при налаштуванні трекінгу

Не обробляється LimitedTrackingReason.ExcessiveMotion

При швидкому русі камери ARCore переходить у Limited, об'єкти починають «стрибати». Заморозьте позицію на час втрати трекінгу, не перераховуйте фізику, відновлюйте плавно через Lerp.

ARRaycastManager використовується без перевірки типу хіта

ARRaycastHit.trackable може бути ARPoint (feature point), а не площиною. Фільтруйте лише TrackableType.PlaneWithinPolygon, щоб не розміщувати об'єкти в повітрі.

Занадто агресивний ARPlane меш у продакшені

У фінальній грі геометрію площин приховуйте або замінюйте декоративним варіантом. Стандартний ARFeatheredPlaneMeshVisualizer з AR Foundation Samples — хороша відправна точка.

Порівняння підходів: прив'язка до площини vs якірна архітектура

Характеристика Прив'язка до ARPlane Прив'язка до ARAnchor
Стабільність при оновленні площини Низька Висока
Обробка втрати трекінгу Вимагає ручної реалізації Вбудовані події
Персистентність між сесіями Неможлива Cloud Anchors
Мультиплеєр Ні Так
Порада: тестування на різних пристроях Навіть при правильній архітектурі поведінка трекінгу може відрізнятися на різних моделях. Рекомендуємо тестувати на 5+ пристроях, включаючи бюджетні Android. Для емуляції використовуйте ARCore Emulator.