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.