Автоматическое переключение объектов Unity XR в сцене Unity
Компоненты XR Unity (включая AR Foundation) поддерживают ограниченный набор устройств. Чтобы использовать AR Foundation на поддерживаемых устройствах, одновременно обеспечивая AR-функции на множестве других устройств, EasyAR предоставляет возможность автоматического переключения объектов Unity XR. Ниже описаны изменения объектов сцены и способы использования этой функции.
Перед началом
- Прочтите Поддержка EasyAR фреймворка Unity XR, чтобы узнать о поддержке EasyAR фреймворка Unity XR и о том, когда стоит рассматривать использование AR Foundation.
- Убедитесь, что в сцену добавлены ARSession и XROrigin из AR Foundation, как описано в Настройка сцены AR Foundation и использование в проекте EasyAR.
Функциональные возможности
Поскольку AR Foundation Unity на мобильных устройствах использует под капотом ARCore и ARKit, она работает только на ограниченном наборе устройств, особенно на многих китайских Android-смартфонах она недоступна. Поэтому обычно рекомендуется включать AR Foundation и связанные с ней скрипты только на поддерживаемых устройствах. Функция автоматического переключения объектов Unity XR реализует эту операцию, в основном предназначена для мобильного AR, и по умолчанию отключена на гарнитурах.
При полной активации функции:
- В редакторе easyar.ARSession отключит UnityEngine.XR.ARFoundation.ARSession.
- Во время выполнения easyar.ARSession в методе Awake() отключит все компоненты Unity XR Core и компоненты AR Foundation.
- Во время выполнения, если выбранный FrameSource наследуется от ARFoundationFrameSource или является ExternalDeviceFrameSource с реализованной точкой отсчета XROrigin, то отключенные компоненты Unity XR Core и AR Foundation будут включены во время easyar.ARSession.StartSession() (не отключенные EasyAR не будут включены). Если выбран другой FrameSource, то во время easyar.ARSession.StartSession() все компоненты Unity XR Core и AR Foundation будут отключены.
- Во время выполнения все компоненты Unity XR Core и AR Foundation отключаются во время easyar.ARSession.StopSession(bool).
В конфигурации по умолчанию функция активируется при следующих условиях:
- Включена на Windows/Mac.
- Включается при запуске переключателя, если загрузчик (loader) мобильного AR (ARKit/ARCore) активен.
- Отключается при запуске переключателя, если существуют загрузчики, отличные от мобильного AR (ARKit/ARCore), но ни один из них не активен.
Примечание
Компоненты XR Interaction Toolkit не контролируются этой функцией, но их работоспособность в EasyAR не проверена. Теоретически, функции, использующие только GameObject Unity.XR.CoreUtils.XROrigin и его камеру, должны работать нормально. При аномальном поведении попробуйте установить ARSession.ARCenterMode в значение ARSession.ARCenterMode.SessionOrigin. Если функциональность все еще не работает, необходимо реализовать пользовательское управление компонентами XR Interaction Toolkit, отключая их, когда FrameSource не наследуется от ARFoundationFrameSource.
Метод настройки
Эту функцию можно включить или выключить с помощью опций в Project Settings > EasyAR > Sense > Unity XR > Unity XR Auto Switch.

Поведение функции настраивается следующими опциями:
- Editor: Настройки для режима редактирования
- Disable AR Session: Если существует easyar.ARSession, отключает UnityEngine.XR.ARFoundation.ARSession во время редактирования.
- Player: Настройки для режима выполнения
- Enable: Включает управление во время выполнения. Примечание: если эта опция выключена, компоненты, отключенные в редакторе, не будут восстановлены во время выполнения.
- Enable If Desktop: Включает на Windows/Mac.
- Enable If Mobile AR On Startup: Включает функцию при запуске переключателя, если загрузчик мобильного AR (ARKit/ARCore) активен. Обычно для работы этой опции в
Project Settings>XR Plug-in Managementдолжен быть выбранInitialize XR on Startup. - Disable If Non Mobile AR Post Startup: Отключает функцию при запуске переключателя, если существуют загрузчики, отличные от мобильного AR (ARKit/ARCore), но ни один из них не активен. Обычно эта опция используется, когда в
Project Settings>XR Plug-in ManagementопцияInitialize XR on Startupне выбрана. - Restore AR Session When Disabled: При отключенной функции восстанавливает (включает) все отключенные UnityEngine.XR.ARFoundation.ARSession (независимо от того, были ли они отключены EasyAR). Эта опция обычно используется для восстановления компонентов, отключенных во время редактирования.
Использование пользовательского метода управления
Если требуется пользовательское управление переключением этих компонентов или поведение EasyAR мешает работе некоторых компонентов, необходимо отключить эти опции и реализовать пользовательское переключение компонентов, следуя основным правилам:
- Отключите UnityEngine.XR.ARFoundation.ARSession в редакторе (оно выполняется раньше всех других скриптов).
- Перед началом работы AR Foundation отключите все компоненты Unity XR Core, AR Foundation и любые другие связанные компоненты или функции, которыми нужно управлять.
- Если в процессе easyar.ARSession.Assemble() выбран ARCoreARFoundationFrameSource или ARKitARFoundationFrameSource, включите все ранее отключенные компоненты или функции до завершения StartSession(). Обычно рекомендуется делать это в обработчике события easyar.ARSession.AssembleUpdate.
- Если в процессе easyar.ARSession.Assemble() выбран другой FrameSource, оставьте состояние компонентов неизменным.