Crear y configurar AR session
Para usar AR en Unity, primero hay que crear y configurar una AR session en la escena. Este artículo presenta varias formas principales de crear y configurar una AR session. Por lo general, después de crearla correctamente, en la vista Hierarchy se puede ver la siguiente estructura:

Antes de empezar
- Conoce los conceptos básicos, la composición y el flujo de trabajo de session a través de Introducción a ARSession.
Crear una session con configuración predeterminada
En la vista Hierarchy, haz clic derecho en un área vacía y usa el menú EasyAR Sense > [ AR función ] > AR Session ([ función ] Preset) para crear una session preconfigurada. La session ya incluye los componentes frame source y frame filter adecuados para esa función.
En el código, puedes usar ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) para crear una session.
Por ejemplo, mediante EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) puedes crear una session para image tracking.

El código correspondiente es el siguiente:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
Ten en cuenta que, al usar los presets ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder y ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, también debes pasar los parámetros de recursos. Por ejemplo, el siguiente código crea una session para sparse spatial mapping y especifica el material de la nube de puntos:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
Si el script solo se ejecuta en el editor, también puedes usar los recursos predeterminados del editor:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
El menú EasyAR Sense > AR Session (Preset) > ** enumera todos los presets de session disponibles y se puede usar como referencia.

Nota
Varias sessions ejecutándose al mismo tiempo en la misma escena entrarán en conflicto entre sí, así que en la escena solo puede quedar una session habilitada (GameObject.activeInHierarchy == true) como máximo.
Añadir componentes
Los componentes frame source y frame filter de la session se pueden añadir o eliminar según sea necesario después de crearla.
En la vista Hierarchy, selecciona AR Session (EasyAR) y haz clic derecho; después, mediante el menú EasyAR Sense > [ AR función ] > ** puedes añadir los componentes frame source y frame filter adecuados para esa función.
En el código, puedes usar ARSessionFactory.AddFrameSource<Source>(GameObject, bool) para añadir un componente frame source, o usar ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) para añadir un componente frame filter.
Por ejemplo, mediante EasyAR Sense > Image Tracking > Frame Filter : Image Tracker puedes añadir un nuevo image tracker a la session seleccionada.

El código correspondiente es el siguiente:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Precaución
La adición de componentes debe completarse antes de assemble. Una vez que la session empieza a ejecutar assemble y después de completarlo, cualquier adición o eliminación de componentes hará que la session entre en estado Broken y deje de funcionar.
Ten en cuenta que al añadir SparseSpatialMapBuilderFrameFilter y DenseSpatialMapBuilderFrameFilter, también debes pasar parámetros de recursos. Por ejemplo, el siguiente código crea un SparseSpatialMapBuilderFrameFilter para sparse spatial mapping y especifica el material de la nube de puntos:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
Si el script solo se ejecuta en el editor, también puedes usar los recursos predeterminados del editor:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
Después de crear un frame filter, puedes usar ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) para ajustar los parámetros del frame filter según el preset.
Por ejemplo, el siguiente código añade un nuevo image tracker a la session y lo configura con los parámetros del preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
Al crear desde el menú no se pueden ajustar los parámetros según el preset, así que después de crear el componente hay que configurarlo según las instrucciones específicas de cada componente.
Eliminar componentes
Para eliminar un componente de la session, puedes seleccionar el componente correspondiente en la vista Hierarchy y pulsar Delete, o destruir (Destroy) el objeto correspondiente desde el script.
Nota
Deshabilitar el GameObject de un componente con SetActive(false) tiene el mismo efecto que eliminarlo.
Por ejemplo, para eliminar el image tracker de la session, puedes seleccionar Image Tracker y pulsar Delete.

Precaución
La eliminación de componentes debe completarse antes de assemble. Una vez que la session empieza a ejecutar assemble y después de completarlo, cualquier adición o eliminación de componentes hará que la session entre en estado Broken y deje de funcionar.
Efecto del orden de los componentes
El orden de los nodos hijo de frame filter de la session no tiene ningún efecto sobre la ejecución de la session.
El orden de los nodos hijo de frame source sí afecta al orden de selección de frame source durante el proceso de assemble. Solo se seleccionará como frame source real de la session el primer frame source disponible según el orden de transform.
Nota
El orden de los nodos frame source solo es válido si se modifica antes de assemble. Después de assemble, cambiar el orden no afecta al resultado de ejecución.
[Opcional] Crear session libremente
Si la session con configuración predeterminada no cubre tus necesidades, también puedes crear y configurar libremente una session según lo que necesites.
Puedes usar el menú EasyAR Sense > AR Session (Preset) > AR Session (Empty) para crear una session vacía sin componentes frame source ni frame filter.
En el código, puedes usar ARSessionFactory.CreateSession() para hacerlo.
ARSessionFactory.CreateSession();
Después añade los componentes frame source y frame filter adecuados según tus necesidades reales.
Por ejemplo, si quieres crear una session que incluya sparse spatial mapping y dense spatial mapping, puedes usar el siguiente código:
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);
Esto creará una estructura de session como la siguiente:

Siguientes pasos
Control de ejecución
- Aprende el método y el efecto de inicialización
- Aprende cómo determinar la disponibilidad y la compatibilidad del dispositivo
- Aprende el método para controlar la ejecución de session
Acceso a componentes y resultados
- Prueba a acceder a los componentes de funciones AR
- Aprende cómo obtener el resultado de ejecución de session
Referencia de componentes
- Referencia del componente ARSession