Table of Contents

Автоматическое переключение объектов Unity XR в сценах Unity

Компоненты XR в Unity (включая AR Foundation) поддерживают ограниченный набор устройств. Чтобы использовать AR Foundation на поддерживаемых устройствах и одновременно предоставлять AR-функции на большом числе других устройств, EasyAR предоставляет функцию автоматического переключения объектов Unity XR. Далее описаны изменения, которые эта функция вносит в объекты сцены, и способы её использования.

Перед началом

Описание функции

Поскольку AR Foundation в Unity на телефонах в основе использует ARCore и ARKit, он работает только на ограниченном наборе устройств, особенно недоступен на многих китайских Android-телефонах. Поэтому обычно рекомендуется включать AR Foundation и связанные функциональные scripts только на поддерживаемых устройствах. Функция автоматического переключения объектов Unity XR выполняет эту операцию, в основном предназначена для mobile AR, а на headset в конфигурации по умолчанию отключена.

Когда функция полностью включена,

В конфигурации по умолчанию условия включения функции следующие:

  • Включается на Windows/Mac.
  • При запуске switcher, если loader mobile AR (ARKit/ARCore) активен, функция включается.
  • При запуске switcher, если существуют другие loader помимо mobile AR (ARKit/ARCore), но ни один loader не активен, функция отключается.
Примечание

Компоненты XR Interaction Toolkit не контролируются этой функцией, а их доступность в EasyAR не проверялась. Теоретически функции, использующие только GameObject Unity.XR.CoreUtils.XROrigin и его Camera, должны работать нормально. Если поведение ненормальное, можно попробовать установить ARSession.ARCenterMode в ARSession.ARCenterMode.SessionOrigin. Если функция всё ещё работает ненормально, нужно реализовать собственное управление компонентами XR Interaction Toolkit и отключать связанные компоненты, когда FrameSource не наследуется от ARFoundationFrameSource.

Способ настройки

Эту функцию можно включить или отключить через параметры Unity XR > Unity XR Auto Switch в Project Settings > EasyAR > Sense.

alt text

Поведение параметров на рисунке:

  • Editor: параметры режима редактирования
  • Player: параметры режима выполнения
    • Enable: включает runtime-управление. Примечание: когда этот параметр выключен, компоненты, отключённые в режиме редактирования, не будут восстановлены во время выполнения.
    • Enable If Desktop: включает на Windows/Mac.
    • Enable If Mobile AR On Startup: при запуске switcher включает функцию, если loader mobile AR (ARKit/ARCore) активен. Обычно для этого параметра требуется, чтобы Initialize XR on Startup в Project Settings > XR Plug-in Management был выбран.
    • Disable If Non Mobile AR Post Startup: при запуске switcher отключает функцию, если существуют другие loader помимо mobile AR (ARKit/ARCore), но ни один loader не активен. Обычно этот параметр используется, когда Initialize XR on Startup в Project Settings > XR Plug-in Management не выбран.
    • Restore AR Session When Disabled: когда функция отключена, восстанавливает (включает) все отключённые UnityEngine.XR.ARFoundation.ARSession независимо от того, были ли они отключены EasyAR. Обычно этот параметр используется для восстановления компонентов, отключённых при редактировании.

Использование собственного способа управления

Если нужно самостоятельно переключать эти компоненты или поведение EasyAR мешает нормальной работе некоторых компонентов, убедитесь, что эти параметры выключены, и настройте переключение компонентов по следующим базовым правилам:

  1. Отключите UnityEngine.XR.ARFoundation.ARSession в редакторе (он выполняется раньше всех других scripts)
  2. Перед началом работы AR Foundation отключите все компоненты Unity XR Core и AR Foundation, а также связанные компоненты или функции, которыми нужно управлять
  3. Если в процессе easyar.ARSession.Assemble() выбран ARCoreARFoundationFrameSource или ARKitARFoundationFrameSource, включите все ранее отключённые компоненты или функции до завершения StartSession(); обычно рекомендуется делать это в обработчике события easyar.ARSession.AssembleUpdate
  4. Если в процессе easyar.ARSession.Assemble() выбран другой FrameSource, оставьте состояние без изменений

Связанные темы