Creazione e configurazione della sessione AR
Per utilizzare la realtà aumentata in Unity, è necessario creare e configurare una sessione AR nella scena. Questo articolo descrive diversi metodi principali per creare e configurare una sessione AR. Dopo aver creato correttamente una sessione, nella vista Hierarchy è possibile vedere una struttura simile alla seguente:

Prima di iniziare
- Comprendi i concetti di base, i componenti e il flusso di lavoro della sessione attraverso Introduzione ad ARSession.
Creazione di una sessione con configurazione predefinita
Nella vista Hierarchy, fai clic con il tasto destro in uno spazio vuoto e seleziona EasyAR Sense > [ Funzione AR ] > AR Session ([ Funzione ] Preset) per creare una sessione preconfigurata. La sessione è preconfigurata con i componenti frame source e frame filter adatti a quella funzione.
Nello script, puoi utilizzare ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) per creare una sessione.
Ad esempio, selezionando EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) puoi creare una sessione per il tracciamento delle immagini.

Il codice corrispondente nello script è:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);
Nota: quando si utilizzano i preset ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder e ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, è necessario passare anche i parametri delle risorse. Ad esempio, il seguente codice crea una sessione per la costruzione di mappe spaziali sparse e specifica il materiale per la nuvola di punti:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });
Se lo script viene eseguito solo nell'editor, puoi utilizzare le risorse predefinite dell'editor:
ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());
Il menu EasyAR Sense > AR Session (Preset) > ** elenca tutte le sessioni preimpostate disponibili, che puoi utilizzare come riferimento.

Nota
Più sessioni in esecuzione simultanea nella stessa scena entreranno in conflitto, quindi nella scena dovrebbe essere attiva (GameObject.activeInHierarchy == true) al massimo una sessione.
Aggiunta di componenti
I componenti frame source e frame filter della sessione possono essere aggiunti o rimossi dopo la creazione della sessione, in base alle esigenze.
Nella vista Hierarchy, seleziona AR Session (EasyAR) e fai clic con il tasto destro, quindi seleziona EasyAR Sense > [ Funzione AR ] > ** per aggiungere i componenti frame source e frame filter adatti a quella funzione.
Nello script, puoi utilizzare ARSessionFactory.AddFrameSource<Source>(GameObject, bool) per aggiungere un componente frame source, oppure ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) per aggiungere un componente frame filter.
Ad esempio, selezionando EasyAR Sense > Image Tracking > Frame Filter : Image Tracker puoi aggiungere un nuovo tracker di immagini alla sessione attualmente selezionata.

Il codice corrispondente nello script è:
ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Attenzione
L'aggiunta di componenti deve essere completata prima dell'assemblaggio. Dopo che la sessione inizia l'assemblaggio o lo completa, qualsiasi aggiunta o rimozione di componenti causerà l'entrata della sessione nello stato Broken e la sua interruzione.
Nota: quando si aggiungono SparseSpatialMapBuilderFrameFilter e DenseSpatialMapBuilderFrameFilter, è necessario passare anche i parametri delle risorse. Ad esempio, il seguente codice crea un SparseSpatialMapBuilderFrameFilter per la costruzione di mappe spaziali sparse e specifica il materiale per la nuvola di punti:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })
Se lo script viene eseguito solo nell'editor, puoi utilizzare le risorse predefinite dell'editor:
ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());
Dopo aver creato un frame filter, puoi utilizzare ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) per adattare i parametri del frame filter in base alla configurazione preimpostata.
Ad esempio, il seguente codice aggiunge un nuovo tracker di immagini alla sessione e lo configura con i parametri predefiniti di ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.
var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);
Quando si utilizza il menu per la creazione, non è possibile regolare i parametri secondo i preset, quindi sarà necessario configurarli in base alle istruzioni specifiche del componente dopo la creazione.
Rimozione di componenti
Per rimuovere un componente dalla sessione, puoi selezionare il componente corrispondente nella vista Hierarchy e premere Canc, oppure distruggere (Destroy) l'oggetto corrispondente nello script.
Nota
Disabilitare (SetActive(false)) il GameObject di un componente ha lo stesso effetto della rimozione del componente.
Ad esempio, per rimuovere un tracker di immagini dalla sessione, seleziona Image Tracker e premi Canc.

Attenzione
La rimozione dei componenti deve essere completata prima dell'assemblaggio. Dopo che la sessione inizia l'assemblaggio o lo completa, qualsiasi aggiunta o rimozione di componenti causerà l'entrata della sessione nello stato Broken e la sua interruzione.
Effetto dell'ordinamento dei componenti
L'ordine dei nodi figlio frame filter della sessione non influisce sull'esecuzione della sessione.
L'ordine dei nodi figlio frame source della sessione influenzerà l'ordine di selezione dei frame source durante il processo di assemblaggio. Solo il primo frame source disponibile in ordine di trasformazione verrà selezionato come frame source effettivo della sessione.
Nota
L'ordine dei nodi frame source è efficace solo se modificato prima dell'assemblaggio. Dopo l'assemblaggio, la modifica dell'ordine non influirà sul risultato dell'esecuzione.
[Opzionale] Creazione libera della sessione
Se la sessione configurata per impostazione predefinita non soddisfa le tue esigenze, puoi creare e configurare liberamente la sessione in base alle necessità.
Puoi utilizzare il menu EasyAR Sense > AR Session (Preset) > AR Session (Empty) per creare una sessione vuota senza alcun componente frame source o frame filter.
Nello script, puoi utilizzare ARSessionFactory.CreateSession() per farlo.
ARSessionFactory.CreateSession();
Quindi, aggiungi i componenti frame source e frame filter appropriati in base alle esigenze effettive.
Ad esempio, se è necessario creare una sessione con funzionalità di costruzione di mappe spaziali sparse e dense, è possibile utilizzare 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 sessione simile a questa:

Passaggi successivi
- Utilizzo della sessione nell'applicazione
- Ordinamento e utilizzo del frame source
- Migliori pratiche per la sessione
Controllo dell'esecuzione
- Scopri il metodo e la funzione dell'inizializzazione
- Scopri come determinare la compatibilità e il supporto del dispositivo
- Scopri i metodi per controllare l'esecuzione della sessione
Accesso a componenti e risultati
- Prova ad accedere ai componenti delle funzionalità AR
- Scopri come ottenere i risultati in esecuzione della sessione
Riferimento ai componenti
- Riferimento al componente ARSession