Creare e configurare AR session
Per usare AR in Unity, bisogna prima creare e configurare una AR session nella scena. Questo articolo presenta i principali modi per creare e configurare una AR session. In generale, dopo la creazione riuscita, nella vista Hierarchy si può vedere la seguente struttura:

Prima di iniziare
- Comprendere i concetti di base, la composizione e il flusso di lavoro di session tramite Introduzione ad ARSession.
Creare una session con configurazione predefinita
Nella vista Hierarchy, fai clic destro in un’area vuota e usa il menu EasyAR Sense > [ AR funzione ] > AR Session ([ funzione ] Preset) per creare una session preconfigurata. La session include già i componenti frame source e frame filter adatti a quella funzione.
Nel codice, puoi usare ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) per creare una session.
Per esempio, tramite EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) puoi creare una session per image tracking.

Il codice corrispondente è il seguente:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
Tieni presente che, quando usi i preset ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder e ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, devi anche passare i parametri delle risorse. Per esempio, il codice seguente crea una session per sparse spatial mapping e specifica il materiale della point cloud:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
Se lo script viene eseguito solo nell’editor, puoi anche usare le risorse predefinite dell’editor:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
Il menu EasyAR Sense > AR Session (Preset) > ** elenca tutti i preset di session disponibili e può essere usato come riferimento.

Nota
Più session eseguite contemporaneamente nella stessa scena andranno in conflitto tra loro, quindi nella scena può restare al massimo una sola session abilitata (GameObject.activeInHierarchy == true).
Aggiungere componenti
I componenti frame source e frame filter della session possono essere aggiunti o rimossi secondo necessità dopo la creazione.
Nella vista Hierarchy, seleziona AR Session (EasyAR) e fai clic destro; poi tramite il menu EasyAR Sense > [ AR funzione ] > ** puoi aggiungere i componenti frame source e frame filter adatti a quella funzione.
Nel codice, puoi usare ARSessionFactory.AddFrameSource<Source>(GameObject, bool) per aggiungere un componente frame source, oppure ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) per aggiungere un componente frame filter.
Per esempio, tramite EasyAR Sense > Image Tracking > Frame Filter : Image Tracker puoi aggiungere un nuovo image tracker alla session selezionata.

Il codice corrispondente è il seguente:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Attenzione
L’aggiunta di componenti deve essere completata prima di assemble. Una volta che la session inizia a eseguire assemble e dopo il completamento, qualsiasi aggiunta o rimozione di componenti farà entrare la session nello stato Broken e smetterà di funzionare.
Tieni presente che quando aggiungi SparseSpatialMapBuilderFrameFilter e DenseSpatialMapBuilderFrameFilter, devi anche passare i parametri delle risorse. Per esempio, il codice seguente crea un SparseSpatialMapBuilderFrameFilter per sparse spatial mapping e specifica il materiale della point cloud:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
Se lo script viene eseguito solo nell’editor, puoi anche usare le risorse predefinite dell’editor:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
Dopo aver creato un frame filter, puoi usare ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) per regolarne i parametri in base al preset.
Per esempio, il codice seguente aggiunge un nuovo image tracker alla session e lo configura con i parametri del preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
Quando si crea dal menu, i parametri non possono essere regolati in base al preset, quindi dopo la creazione il componente va configurato seguendo la documentazione specifica.
Rimuovere componenti
Per rimuovere un componente dalla session, puoi selezionare il componente corrispondente nella vista Hierarchy e premere Delete, oppure distruggere (Destroy) l’oggetto corrispondente dallo script.
Nota
Disabilitare il GameObject di un componente con SetActive(false) ha lo stesso effetto della rimozione.
Per esempio, per rimuovere l’image tracker dalla session, puoi selezionare Image Tracker e premere Delete.

Attenzione
La rimozione di componenti deve essere completata prima di assemble. Una volta che la session inizia a eseguire assemble e dopo il completamento, qualsiasi aggiunta o rimozione di componenti farà entrare la session nello stato Broken e smetterà di funzionare.
Effetto dell’ordine dei componenti
L’ordine dei nodi figli di frame filter della session non ha alcun effetto sull’esecuzione della session.
L’ordine dei nodi figli di frame source influisce invece sull’ordine di selezione del frame source durante il processo di assemble. Solo il primo frame source disponibile secondo l’ordine di transform verrà selezionato come frame source effettivo della session.
Nota
L’ordine dei nodi frame source è valido solo se viene modificato prima di assemble. Dopo assemble, cambiare l’ordine non influenza il risultato di esecuzione.
[Opzionale] Creare session liberamente
Se la session con configurazione predefinita non soddisfa le tue esigenze, puoi anche creare e configurare liberamente una session secondo necessità.
Puoi usare il menu EasyAR Sense > AR Session (Preset) > AR Session (Empty) per creare una session vuota senza componenti frame source né frame filter.
Nel codice, puoi usare ARSessionFactory.CreateSession() per farlo.
ARSessionFactory.CreateSession();
Poi aggiungi i componenti frame source e frame filter adatti alle esigenze reali.
Per esempio, se vuoi creare una session che includa sparse spatial mapping e dense spatial mapping, puoi usare il seguente codice:
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);
Questo creerà una struttura di session come segue:

Passi successivi
Controllo esecuzione
- Impara il metodo e l’effetto di inizializzazione
- Impara come determinare disponibilità e compatibilità del dispositivo
- Impara il metodo per controllare l’esecuzione di session
Accesso a componenti e risultati
- Prova ad accedere ai componenti delle funzioni AR
- Impara come ottenere il risultato di esecuzione di session
Riferimento componenti
- Riferimento del componente ARSession