Автоматическое переключение объектов Unity XR в сценах Unity
Компоненты XR в Unity (включая AR Foundation) поддерживают ограниченный набор устройств. Чтобы использовать AR Foundation на поддерживаемых устройствах и одновременно предоставлять AR-функции на большом числе других устройств, EasyAR предоставляет функцию автоматического переключения объектов Unity XR. Далее описаны изменения, которые эта функция вносит в объекты сцены, и способы её использования.
Перед началом
- Прочитайте Поддержка Unity XR framework в EasyAR, чтобы понять поддержку EasyAR для Unity XR framework и ситуации, когда можно рассматривать использование AR Foundation.
- Убедитесь, что в сцену добавлены ARSession и XROrigin из AR Foundation, как описано в Настройка и использование сцены AR Foundation в проектах EasyAR.
Описание функции
Поскольку AR Foundation в Unity на телефонах в основе использует ARCore и ARKit, он работает только на ограниченном наборе устройств, особенно недоступен на многих китайских Android-телефонах. Поэтому обычно рекомендуется включать AR Foundation и связанные функциональные scripts только на поддерживаемых устройствах. Функция автоматического переключения объектов Unity XR выполняет эту операцию, в основном предназначена для mobile AR, а на headset в конфигурации по умолчанию отключена.
Когда функция полностью включена,
- В редакторе easyar.ARSession отключает UnityEngine.XR.ARFoundation.ARSession
- Во время выполнения easyar.ARSession отключает все компоненты Unity XR Core и компоненты AR Foundation в Awake().
- Во время выполнения, если выбранный FrameSource наследуется от ARFoundationFrameSource или является ExternalDeviceFrameSource, реализующим origin XROrigin, отключённые компоненты Unity XR Core и AR Foundation будут включены при easyar.ARSession.StartSession() (компоненты, не отключённые EasyAR, включаться не будут). Если выбран другой FrameSource, все компоненты Unity XR Core и AR Foundation будут отключены при easyar.ARSession.StartSession().
- Во время выполнения все компоненты Unity XR Core и AR Foundation будут отключены при easyar.ARSession.StopSession(bool).
В конфигурации по умолчанию условия включения функции следующие:
- Включается на 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.

Поведение параметров на рисунке:
- Editor: параметры режима редактирования
- Disable AR Session: при наличии easyar.ARSession отключает UnityEngine.XR.ARFoundation.ARSession во время редактирования.
- 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 мешает нормальной работе некоторых компонентов, убедитесь, что эти параметры выключены, и настройте переключение компонентов по следующим базовым правилам:
- Отключите UnityEngine.XR.ARFoundation.ARSession в редакторе (он выполняется раньше всех других scripts)
- Перед началом работы AR Foundation отключите все компоненты Unity XR Core и AR Foundation, а также связанные компоненты или функции, которыми нужно управлять
- Если в процессе easyar.ARSession.Assemble() выбран ARCoreARFoundationFrameSource или ARKitARFoundationFrameSource, включите все ранее отключённые компоненты или функции до завершения StartSession(); обычно рекомендуется делать это в обработчике события easyar.ARSession.AssembleUpdate
- Если в процессе easyar.ARSession.Assemble() выбран другой FrameSource, оставьте состояние без изменений