Создание и настройка AR сессии
Для использования AR в Unity необходимо сначала создать и настроить AR сессию в сцене. В этой статье описаны основные способы создания и настройки AR сессии. Обычно после успешного создания сессии в представлении Hierarchy можно увидеть следующую структуру:

Перед началом
- Ознакомьтесь с основными понятиями, составом и рабочим процессом сессии через Введение в ARSession.
Создание сессии с конфигурацией по умолчанию
В представлении Hierarchy щелкните правой кнопкой мыши на пустом месте и через меню EasyAR Sense > [ AR функция ] > AR Session ([ функция ] Preset) можно создать предустановленную сессию. Сессия предварительно настроена с компонентами frame source и frame filter, подходящими для этой функции.
В скриптах можно использовать ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) для создания сессии.
Например, через меню EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) можно создать сессию для отслеживания изображений.

Соответствующий код скрипта:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
Важно отметить, что при использовании пресетов ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder и ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder необходимо также передавать параметры ресурсов. Например, следующий код создает сессию для построения разреженной карты пространства и указывает материал облака точек:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
Если скрипт выполняется только в редакторе, можно использовать ресурсы редактора по умолчанию:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
В меню EasyAR Sense > AR Session (Preset) > ** перечислены все доступные предустановленные сессии, которые можно использовать.

Примечание
Несколько одновременно работающих сессий в одной сцене будут конфликтовать, поэтому в сцене может быть активна ( GameObject.activeInHierarchy == true) только одна сессия.
Добавление компонентов
Компоненты frame source и frame filter сессии можно добавлять и удалять по мере необходимости после создания сессии.
В представлении Hierarchy выберите AR Session (EasyAR), щелкните правой кнопкой мыши и через меню EasyAR Sense > [ AR функция ] > ** можно добавить компоненты frame source и frame filter, подходящие для этой функции.
В скриптах можно использовать ARSessionFactory.AddFrameSource<Source>(GameObject, bool) для добавления компонента frame source или ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) для добавления компонента frame filter.
Например, через меню EasyAR Sense > Image Tracking > Frame Filter : Image Tracker можно добавить новый трекер изображений к текущей выбранной сессии.

Соответствующий код скрипта:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Осторожно
Добавление компонентов должно быть завершено до сборки (assemble). После того как сессия начнет выполнять сборку или завершит ее, любое добавление или удаление компонентов приведет к переходу сессии в состояние Broken и прекращению работы.
Важно отметить, что при добавлении SparseSpatialMapBuilderFrameFilter и DenseSpatialMapBuilderFrameFilter необходимо также передавать параметры ресурсов. Например, следующий код создает SparseSpatialMapBuilderFrameFilter для построения разреженной карты пространства и указывает материал облака точек:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
Если скрипт выполняется только в редакторе, можно использовать ресурсы редактора по умолчанию:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
После создания frame filter можно использовать ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) для настройки параметров frame filter в соответствии с предустановкой.
Например, следующий код добавляет новый трекер изображений к сессии и настраивает его с параметрами предустановки ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
При создании через меню невозможно настроить параметры по предустановке, поэтому после создания необходимо настроить их в соответствии с описанием конкретного компонента.
Удаление компонентов
Чтобы удалить компонент из сессии, в представлении Hierarchy выберите соответствующий компонент и нажмите клавишу Delete, или уничтожьте (Destroy) соответствующий объект в скрипте.
Примечание
Отключение ( SetActive(false) ) GameObject компонента дает тот же эффект, что и удаление компонента.
Например, чтобы удалить трекер изображений из сессии, выберите Image Tracker и нажмите клавишу Delete.

Осторожно
Удаление компонентов должно быть завершено до сборки (assemble). После того как сессия начнет выполнять сборку или завершит ее, любое добавление или удаление компонентов приведет к переходу сессии в состояние Broken и прекращению работы.
Влияние порядка компонентов
Порядок дочерних узлов frame filter сессии не влияет на выполнение сессии.
Порядок дочерних узлов frame source сессии влияет на порядок выбора frame source в процессе сборки. Только первый доступный frame source в порядке transform будет выбран в качестве фактического frame source сессии.
Примечание
Порядок узлов frame source эффективен только при изменении до сборки. После сборки изменение порядка не повлияет на результат работы.
[Опционально] Свободное создание сессии
Если сессия с конфигурацией по умолчанию не соответствует требованиям, можно свободно создавать и настраивать сессию по мере необходимости.
Можно использовать меню EasyAR Sense > AR Session (Preset) > AR Session (Empty) для создания пустой сессии без каких-либо компонентов frame source и frame filter.
В скриптах можно использовать ARSessionFactory.CreateSession() для этого.
ARSessionFactory.CreateSession();
Затем, в зависимости от фактических потребностей, добавьте соответствующие компоненты frame source и frame filter.
Например, если необходимо создать сессию с функциями построения разреженной и плотной карты пространства, можно использовать следующий код:
var session = ARSessionFactory.CreateSession();
var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);
ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);
List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);
Он создаст такую структуру сессии:

Следующие шаги
Управление выполнением
- Узнайте о методах и назначении инициализации
- Узнайте, как определить доступность и поддержку устройств
- Узнайте о методах управления выполнением сессии
Доступ к компонентам и результатам
- Попробуйте получить доступ к компонентам AR функций
- Узнайте, как получить результаты выполнения сессии
Справочник по компонентам
- Справочник по компоненту ARSession