Supporto del dispositivo e report di sessione
A causa delle differenze hardware e di prestazioni dei dispositivi, le funzionalità AR spesso non funzionano su tutti i dispositivi. Pertanto, è fondamentale determinare con precisione il supporto del dispositivo corrente quando si utilizzano funzionalità AR. Questo articolo spiega come viene espresso il supporto del dispositivo in Unity e come ottenere informazioni sul supporto del dispositivo e sulla disponibilità della sessione tramite il report di sessione (ARSession.Report).
Prima di iniziare
- Comprendere i concetti di base, i componenti e il flusso di lavoro della sessione tramite Introduzione ad ARSession
Supporto del dispositivo, disponibilità della sessione e assemblaggio
Ogni funzionalità AR può supportare dispositivi diversi. Ad esempio, il motion tracking richiede componenti hardware specifici e solitamente la calibrazione del dispositivo, mentre il riconoscimento di immagini può funzionare su quasi tutti i dispositivi con fotocamera funzionante. Pertanto, per determinare se un'applicazione AR può funzionare su un dispositivo specifico, è necessario sapere quali funzionalità AR vengono utilizzate o, in altre parole, determinare se una sessione può essere eseguita sul dispositivo.
In Unity, questo processo di determinazione avviene durante la fase di assemblaggio della sessione (Assemble()). L'assemblaggio determina lo stato finale della sessione prima dell'avvio, in base ai componenti inclusi nella sessione e al supporto del dispositivo corrente.
Se l'assemblaggio ha successo, la sessione entra nello stato Ready e può essere avviata ed eseguita; se l'assemblaggio fallisce, la sessione entra nello stato Broken e la causa specifica del fallimento può essere verificata tramite il report di sessione (ARSession.Report).
Report di sessione
La proprietà ARSession.Report fornisce un report operativo della sessione. Un report di sessione include i seguenti campi:
| Proprietà | Descrizione |
|---|---|
| Availability | Report completo di disponibilità |
| BrokenReason | Motivo del danneggiamento della sessione, valido quando lo stato della sessione è Broken |
| Exception | Eccezione specifica del danneggiamento della sessione, valido quando lo stato della sessione è Broken |
Nel report di sessione, è possibile verificare la disponibilità di ogni componente tramite Availability o consultare BrokenReason per i dettagli del motivo del danneggiamento quando la sessione è danneggiata.
Esempio di report di sessione
Ad esempio, su Windows, se una sessione include ImageTrackerFrameFilter, CameraDeviceFrameSource e diversi altri componenti frame source, il processo di assemblaggio verificherà la disponibilità di ogni componente e genererà un report come questo:

Si può osservare che, sebbene Availability del componente ARCoreFrameSource sia Unavailable, poiché Availability di ImageTrackerFrameFilter e CameraDeviceFrameSource sono entrambi Available, l'assemblaggio complessivo della sessione ha successo e la sessione entra correttamente nello stato Ready.
Se rimuoviamo CameraDeviceFrameSource dalla sessione, il processo di assemblaggio genererà questo report:

Si può notare che il numero di elementi in FrameSources è diminuito da 9 a 8. Sebbene Availability del componente ImageTrackerFrameFilter sia ancora Available, l'assenza di componenti frame source disponibili causa il fallimento dell'assemblaggio della sessione, che entra nello stato Broken. In questo caso, il campo BrokenReason nel report ha valore NoAvailabileFrameSource, indicando l'assenza di frame source disponibili.
Oltre al processo di assemblaggio, la sessione può danneggiarsi anche durante l'esecuzione, ad esempio se un componente in esecuzione viene rimosso accidentalmente. In tali casi, è possibile verificare la causa specifica tramite il report di sessione.
Aggiornamento del report
Il report di sessione cambia nei seguenti momenti:
Completamento della prima fase di assemblaggio
Viene generato un report di sessione completo, inclusa la disponibilità dei componenti. La parte Availability del report viene determinata in questo momento e non cambia ulteriormente.
È possibile ottenere aggiornamenti sulla disponibilità dei componenti tramite l'evento AssembleUpdate.
Se la sessione viene avviata subito dopo l'assemblaggio, è possibile ottenere aggiornamenti del report di sessione anche tramite l'evento StateChanged. Gli stati della sessione da monitorare includono: Ready e Broken.Completamento della seconda fase di assemblaggio
Viene generato un nuovo report sulla disponibilità dei componenti. Il report di sessione non viene aggiornato a meno che la sessione non venga riavviata.
È possibile ottenere aggiornamenti sulla disponibilità dei componenti tramite l'evento AssembleUpdate.Danneggiamento della sessione durante l'avvio o l'esecuzione
I campi BrokenReason e Exception del report di sessione vengono aggiornati.
È possibile ottenere aggiornamenti del report di sessione tramite l'evento StateChanged. Lo stato della sessione da monitorare è: Broken.
Contenuto del report: motivi del danneggiamento della sessione
BrokenReason indica il motivo del danneggiamento della sessione, con le seguenti possibilità:
| Motivo | Descrizione |
|---|---|
| Uninitialized | Assemblaggio, EasyAR Sense non inizializzato correttamente |
| LicenseInvalid | Assemblaggio, verifica della licenza EasyAR Sense fallita o non valida per l'uso corrente |
| SessionObjectIncomplete | Assemblaggio, oggetto sessione incompleto. Ad esempio, RendererFeature non configurato correttamente in URP |
| NoAvailabileFrameSource | Assemblaggio, nessun frame source disponibile. Ad esempio, tutti i frame source non sono disponibili o non ne è stato aggiunto nessuno. Solo nella configurazione di sessione predefinita, indica che il dispositivo non supporta le funzionalità AR selezionate |
| FrameSourceIncomplete | Assemblaggio, frame source incompleto. Generalmente si verifica quando un frame source personalizzato non implementa correttamente l'interfaccia frame source |
| FrameFilterNotAvailabile | Assemblaggio, presenza di frame filter non disponibili. Questo caso esiste solo con alcune opzioni di assemblaggio. |
| StartFailed | Avvio fallito. Ad esempio, eccezione durante l'avvio |
| RunningFailed | Esecuzione fallita. Ad esempio, rimozione accidentale di un componente in esecuzione o RendererFeature non configurato correttamente in URP. |
Contenuto del report: informazioni sulla disponibilità
Availability fornisce informazioni sulla disponibilità di ogni componente nella sessione. Include i seguenti campi:
| Campo | Descrizione |
|---|---|
| FrameFilters | Elenco dei frame filter verificati durante l'assemblaggio |
| FrameSources | Elenco dei frame source verificati durante l'assemblaggio |
| PendingDeviceList | Attività di download dell'elenco dispositivi non completate |
| DeviceList | Risultato del download dell'elenco dispositivi |
I campi PendingDeviceList e DeviceList indicano lo stato di download dell'elenco di supporto dei dispositivi. Al completamento della prima fase di assemblaggio, se e solo se PendingDeviceList non è vuoto, l'assemblaggio procede alla seconda fase. È possibile utilizzare questa condizione per determinare se AssembleUpdate verrà eseguito una seconda volta.