Управление процессом отслеживания Mega
В этой статье объясняется, как управлять различными функциями и параметрами процесса отслеживания Mega для удовлетворения потребностей различных сценариев применения.
Перед началом
Настройка уровня поддержки устройства
Свойство MegaTrackerFrameFilter.MinInputFrameLevel компонента MegaTrackerFrameFilter задает минимальный уровень устройства, поддерживаемый Mega.
![]()
Mega может работать практически с любыми источниками данных кадров, но разные источники по-разному влияют на результаты отслеживания.
По умолчанию Mega выбирает источник данных кадра с самым высоким уровнем поддержки, доступным на устройстве. Сессия с поддержкой Mega в конфигурации по умолчанию уже настроена с источниками данных кадров, поддерживающими 6DoF и 5DoF.
Для поддержки источника данных кадра определенного уровня во время работы Mega требуется выполнение двух условий:
- Требуемый источник данных кадра должен находиться в группе доступных источников данных кадра сессии.
- Значение MegaTrackerFrameFilter.MinInputFrameLevel должно быть больше или равно уровню CameraTransformType требуемого источника данных кадра.
Например, для поддержки отслеживания 3DoF в сессии по умолчанию необходимо:
- Добавить ThreeDofCameraDeviceFrameSource в группу источников данных кадра сессии.
- Изменить MegaTrackerFrameFilter.MinInputFrameLevel на ThreeDof.
Другой пример: чтобы удалить поддержку отслеживания 5DoF из сессии по умолчанию, необходимо:
- Удалить InertialCameraDeviceFrameSource из группы источников данных кадра сессии.
- Изменить MegaTrackerFrameFilter.MinInputFrameLevel на SixDof (даже без изменения, 5DoF не будет использоваться, так как отсутствует соответствующий источник данных кадра).
Если нет доступного источника данных кадра, удовлетворяющего условиям, сборка сессии завершится неудачей.
Управление целями отслеживания
При использовании Mega необходимо указать target (цель), т.е. block, используемый компонентом MegaTrackerFrameFilter.
Управление источником block
В большинстве случаев рекомендуется сохранять конфигурацию по умолчанию, т.е. импортировать block с помощью Mega Studio в редакторе.
Выберите объект Mega Tracker в сессии, параметр Block Root Source должен оставаться External (по умолчанию).
![]()
Также необходимо указать Block Root как объект MegaBlocks в сцене.
![]()
Изменение параметра Block Root Source позволяет указать другие способы получения block. Например, при импорте данных с помощью ema обычно выбирают опцию Internal или Mixed.
В скриптах аналогичного эффекта можно достичь, изменив свойство BlockHolder.BlockRootSource.
Управление отслеживанием нескольких целей
В большинстве сценариев использования Mega нет необходимости в отслеживании нескольких целей. Пока вы не освоите методы предотвращения взаимного влияния нескольких block, рекомендуется размещать в локализационном наборе только один block.
Совет
Принципиально Mega вычисляет позицию устройства относительно всех block, а не выбирает из локализационного набора тот block, который видит устройство. Непродуманное использование может привести к ухудшению результатов из-за путаницы в данных и других причин.
Выберите объект Mega Tracker в сессии, изменение параметра Multi Block включает или отключает функцию отслеживания нескольких целей.
![]()
В скриптах аналогичного эффекта можно достичь, изменив свойство BlockHolder.MultiBlock.
Предупреждение
Обычно в локализационном наборе может быть одновременно только один block.
Изменение конфигурации множественных целей влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством службы поддержки EasyAR.
Если эта конфигурация изменялась во время выполнения приложения, обязательно укажите это при обращении за поддержкой в EasyAR.
Понимание текущего состояния системы
В конфигурации сессии по умолчанию UI-сообщения отображаются на экране и содержат информацию о состоянии отслеживания Mega.
При успешной локализации в разделе Mega Block будет отображаться статус Found, а также имя и ID текущего отслеживаемого block:
![]()
При неудачной локализации в разделе Mega Block будет отображаться статус NotFound:
![]()
Совет
NotFound — это нормальное состояние, которое часто возникает в процессе работы Mega. При появлении этого состояния отслеживание продолжается. Обычно в разработке приложений не требуется специальной обработки состояния NotFound.
Используя событие MegaTrackerFrameFilter.LocalizationRespond, можно получить текущий статус локализации и понять, обнаружила ли система цель отслеживания в данный момент.
Следующий код демонстрирует, как использовать это событие, а также методы обработки распространенных аномальных состояний, требующих внимания приложения:
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// Сервис пробуждается, необходимо, чтобы конечный пользователь подождал
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// Превышен QPS-лимит, у случайных конечных пользователей локализация будет неудачной (общее качество отслеживания снижается)
// Обычно в этом случае требуется оплата для повышения лимита QPS, чтобы обеспечить качество отслеживания при текущем количестве пользователей
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Истек срок действия токена (возникает только при использовании Token API для доступа к сервису)
// Для решения проблемы приложение должно запросить токен у своего бэкенда и вызвать MegaTrackerFrameFilter.UpdateToken для его обновления
}
}
Если приложение часто сталкивается со статусом MegaTrackerLocalizationStatus.RequestTimeout, это обычно указывает на плохое сетевое соединение устройства с сервисом. Рекомендуется оптимизировать сетевую среду для повышения качества отслеживания. В ситуациях, когда улучшить сетевое соединение невозможно, можно рассмотреть увеличение времени ожидания запроса.
Примечание
Через это событие невозможно получить pose (позицию и ориентацию), возвращаемую локализацией.
Фактически, pose, возвращаемая локализацией, не нужна при разработке приложения. EasyAR после успешной локализации вычисляет более точную pose с помощью локальных алгоритмов и возвращает ее разработчику для использования. Эта pose уже отражена в transform блока. См. получение результата работы сессии.
Пауза и возобновление
Функции отслеживания и локализации Mega можно приостанавливать и возобновлять по отдельности.
Пауза отслеживания
Установка свойства MegaTrackerFrameFilter.enabled в значение false приостанавливает отслеживание.
По умолчанию после паузы отслеживания все содержимое под узлами block будет скрыто.
Пауза локализации
Установка свойства MegaTrackerFrameFilter.EnableLocalization в значение false приостанавливает локализацию.
Предупреждение
Пауза локализации влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством службы поддержки EasyAR.
Если локализация приостанавливалась во время выполнения приложения, обязательно укажите это при обращении за поддержкой в EasyAR.
Управление сервисом и запросами
Поведение запросов к сервису можно контролировать, изменяя параметры компонента MegaTrackerFrameFilter.
Интервал запросов и тайм-аут
Выберите объект Mega Tracker в сессии, измените параметры в разделе Request Time Parameters, чтобы настроить интервал запросов к сервису и время тайм-аута.
![]()
В скриптах аналогичного эффекта можно достичь, изменив свойство MegaTrackerFrameFilter.RequestTimeParameters.
Предупреждение
Изменение интервала запросов влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством службы поддержки EasyAR.
Если интервал запросов изменялся во время выполнения приложения, обязательно укажите это при обращении за поддержкой в EasyAR.
Переключение локализационного набора
Использование метода MegaTrackerFrameFilter.SwitchEndPoint(ExplicitAddressAccessData, BlockRootController) позволяет переключить локализационный набор во время выполнения. При использовании этого интерфейса изображение с камеры и работа сессии не прерываются.
Связанные темы
- Лучшие практики AR Session для Mega — описывает создание и настройку AR Session, подходящего для Mega.
- Добавление целей отслеживания Mega — объясняет, как добавлять цели отслеживания Mega (block), и как загружать модели block в редакторе Unity для помощи в разработке.
- Добавление группы источников данных кадра — объясняет, как изменять группу источников данных кадра сессии.
- Получение результата работы сессии — объясняет, как получать результаты отслеживания компонентов сессии.
- UI-сообщения — объясняет, как использовать UI-сообщения для отображения состояния сессии.