Управление процессом отслеживания Mega Go
В этой статье объясняется, как управлять функциями и параметрами процесса отслеживания Mega Go, чтобы соответствовать требованиям разных сценариев использования.
Перед началом
- Проверьте Уже ли доступна моя функция локализации?, чтобы убедиться, что загружена правильная карта.
Рабочий процесс tracker
Рабочий процесс tracker выглядит так:
flowchart LR
subgraph startup_graph[Запуск]
direction TB
sstart((Запуск session))
create[Нативное создание]
load(Загрузить target)
verify[Проверка trial]
init_g[[Инициализация]]
end
subgraph init_graph[Инициализация]
direction TB
init_{Инициализация 6DoF успешна<br>или не 6DoF}
init[[Процесс инициализации локального tracking]]
detecting[[Обнаружение]]
tracking_g[[Tracking]]
end
subgraph tracking_graph[Tracking]
direction TB
tracking[[Непрерывный tracking]]
end
subgraph stopping_graph[Остановка]
direction TB
unload(Выгрузить target)
dispose[Нативное уничтожение]
sstop([Остановка session])
end
sstart --> create --> load --> verify --> init_g
init --> init_ --> |Yes| detecting --> tracking_g
unload --> dispose --> sstop
init_ --> |No| init
startup_graph --> init_graph
init_graph --> tracking_graph
tracking_graph --> stopping_graph
Процесс в целом делится на несколько этапов:
- Запуск:
- После запуска session создаётся tracker на нативном уровне.
- После Start() у target он загружается в соответствующий tracker.
- Для пробных данных требуется онлайн-проверка права на пробное использование; только после успешной проверки переходят к следующему этапу.
- Инициализация:
- При использовании frame source 6DoF начинается процесс локальной инициализации tracking.
- Локальная инициализация tracking может занять некоторое время; это зависит от сложности сцены и возможностей устройства, а также обычно связано с алгоритмом, используемым нижним уровнем frame source.
- При использовании frame source, не относящегося к 6DoF, этап локальной инициализации пропускается, и сразу начинается обнаружение.
- Процесс обнаружения тоже может занять некоторое время, в зависимости от того, насколько легко локализуется сцена, и от качества захвата и построения карты.
- При настройках по умолчанию содержимое этого этапа не показывается; поведение можно управлять через параметры компонента ActiveController.
- При использовании frame source 6DoF начинается процесс локальной инициализации tracking.
- Tracking:
- tracker непрерывно отслеживает текущий block.
- При настройках по умолчанию отображается только содержимое под узлами target, находящимися в состоянии tracking (TargetController.IsTracked ==
true); это поведение можно управлять через параметры компонента ActiveController.
- Остановка:
- После остановки session target выгружается, а tracker на нативном уровне уничтожается.
Настройка уровня поддержки устройства
Свойство MegaGoTrackerFrameFilter.MinInputFrameLevel у MegaGoTrackerFrameFilter используется для задания минимального уровня устройства, поддерживаемого Mega.
![]()
Mega Go может работать почти с любыми типами frame source, но каждая frame source по-разному влияет на результат tracking.
По умолчанию Mega выбирает для tracking frame source самого высокого уровня, поддерживаемого устройством. Session, совместимая с Mega Go в настройках по умолчанию, уже настроена с frame source, поддерживающими 6DoF и 5DoF.
Чтобы Mega поддерживал frame source определённого уровня во время выполнения, должны выполняться два условия:
- Нужная frame source находится в группе доступных frame source у session.
- MegaGoTrackerFrameFilter.MinInputFrameLevel больше или равен уровню CameraTransformType нужной frame source.
Например, чтобы поддержать tracking 3DoF в session по умолчанию, нужно:
- Добавить ThreeDofCameraDeviceFrameSource в группу frame source session.
- Изменить MegaGoTrackerFrameFilter.MinInputFrameLevel на ThreeDof.
Другой пример: чтобы убрать поддержку tracking 5DoF из session по умолчанию, нужно:
- Удалить InertialCameraDeviceFrameSource из группы frame source session.
- Изменить MegaGoTrackerFrameFilter.MinInputFrameLevel на SixDof (даже без изменения, поскольку frame source 5DoF отсутствует, 5DoF всё равно не будет использоваться).
Если ни одна frame source, удовлетворяющая условиям, недоступна, сборка session завершится с ошибкой.
Понимание текущего состояния системы
При конфигурации session по умолчанию на экране отображаются UI-сообщения, содержащие информацию о состоянии Mega Go.
Состояние tracker отображается рядом с Mega Go: , например Tracking или VerifyingTrial. Во время обнаружения и tracking ниже также показываются обновления локализации.
![]()
Состояние tracking текущего загруженного block отображается под Mega Go: в формате Block (<trackingStatus>): <name> (<id>). <name> — имя block, <id> — ID block. trackingStatus может быть Tracking или NotTracking, что соответственно указывает, отслеживается ли текущий block.

Свойство MegaGoTrackerFrameFilter.Status позволяет получить текущее состояние и понять, как работает tracker. При возникновении ошибки можно получить её состояние через MegaGoTrackerFrameFilter.Error и обработать соответствующим образом.
Следующий код показывает, как использовать эти свойства и как обрабатывать распространённые нештатные состояния, на которые приложению следует обратить внимание:
void HandleTrackerStatus()
{
if (tracker.Status == MegaGoTrackerStatus.Error)
{
if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
{
// локальная проверка не пройдена; рекомендуется проверить, не истек ли срок data и не стали ли данные недействительными (тестовые данные становятся недействительными после перехода с тестовой версии на официальную).
}
else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
{
// локальная проверка не пройдена; рекомендуется проверить, полон ли файл target.
}
else
{
// другие ошибки.
}
}
else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
{
// идет проверка пробного target. Если проверка долго не завершается, рекомендуется проверить сетевое подключение.
}
else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
{
// инициализируется вход VIO. Если инициализация долго не завершается, рекомендуется подсказать пользователю оптимизировать способ использования.
// например: "попробуйте направить камеру по диагонали вперед и 5 раз широко переместить устройство влево и вправо."
}
}
Для получения обновлений локализации используйте событие MegaGoTrackerFrameFilter.LocalizationRespond.
Пауза и продолжение
Установите для MegaGoTrackerFrameFilter.enabled значение false, чтобы приостановить tracking.
По умолчанию после приостановки tracking всё содержимое под узлами block будет скрыто.
Связанные темы
- Лучшие практики AR Session для Mega Go описывает, как создать и настроить AR Session, подходящую для Mega Go
- Добавление targets отслеживания Mega Go описывает, как добавлять block target отслеживания Mega Go и как загружать модели block в Unity Editor для помощи в разработке
- Добавление группы frame source описывает, как изменять группу frame source session
- Получение результата выполнения session описывает, как получать результат tracking компонента session
- UI-сообщения описывает, как использовать UI-сообщения для отображения состояния session