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

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

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

Примечание
Несколько session, запущенных одновременно в одной сцене, будут конфликтовать друг с другом, поэтому в сцене может быть только одна включённая (GameObject.activeInHierarchy == true) session.
Добавление компонентов
Компоненты frame source и frame filter session можно добавлять и удалять по необходимости после создания.
В окне 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 можно добавить новый image tracker в выбранную session.

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

Осторожно
Удаление компонентов тоже нужно завершить до assemble. После того как session начнёт выполнять assemble и после его завершения, любое добавление или удаление компонентов переведёт session в состояние Broken и она перестанет работать.
Влияние порядка компонентов
Порядок дочерних узлов frame filter у session не влияет на её выполнение.
Порядок дочерних узлов frame source влияет на порядок выбора frame source во время assemble. В качестве реального frame source session будет выбран только первый доступный frame source согласно порядку transform.
Примечание
Порядок узлов frame source имеет значение только если его изменить до assemble. После assemble изменение порядка не влияет на результат выполнения.
[Опционально] Свободное создание session
Если session с настройками по умолчанию не подходит под ваши задачи, можно свободно создавать и настраивать session по необходимости.
Через меню EasyAR Sense > AR Session (Preset) > AR Session (Empty) можно создать пустую session без компонентов frame source и frame filter.
В коде можно использовать ARSessionFactory.CreateSession().
ARSessionFactory.CreateSession();
Затем добавьте подходящие компоненты frame source и frame filter в соответствии с реальными потребностями.
Например, если нужно создать session, включающую sparse spatial mapping и dense spatial mapping, можно использовать такой код:
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);
Это создаст такую структуру session:

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