Support des appareils et rapports de session
En raison des différences de matériel et de performances des appareils, les fonctionnalités AR ne fonctionnent souvent pas sur tous les appareils. Il est donc crucial de déterminer avec précision la prise en charge de l'appareil actuel lors de l'utilisation des fonctionnalités AR. Ce document explique comment la disponibilité des appareils est exprimée dans Unity, et comment obtenir des informations sur la prise en charge des appareils et la disponibilité de la session via les rapports de session (ARSession.Report).
Avant de commencer
- Comprendre les concepts de base, la composition et le flux de travail des sessions via Introduction à ARSession
Prise en charge des appareils, disponibilité de la session et assemblage
Chaque fonctionnalité AR peut prendre en charge différents appareils. Par exemple, le suivi de mouvement nécessite certaines exigences matérielles et nécessite généralement un étalonnage de l'appareil, tandis que le suivi d'image peut fonctionner sur presque tous les appareils disposant d'une caméra utilisable. Ainsi, pour déterminer si une application AR peut fonctionner sur un appareil donné, il est généralement nécessaire de connaître les fonctionnalités AR utilisées, ou en d'autres termes, de déterminer si une session spécifique peut fonctionner sur l'appareil.
Dans Unity, ce processus de détermination s'effectue lors de la phase d'assemblage de la session (Assemble()). L'assemblage détermine l'état final de la session avant son démarrage, en fonction des composants inclus dans la session et de la prise en charge de l'appareil actuel.
Si l'assemblage réussit, la session passe à l'état Ready et peut être démarrée et exécutée ; si l'assemblage échoue, la session passe à l'état Broken, et la raison spécifique de l'échec peut être consultée via le rapport de session (ARSession.Report).
Rapports de session
La propriété ARSession.Report fournit un rapport d'exécution de la session. Un rapport de session contient les champs suivants :
| Propriété | Description |
|---|---|
| Availability | Rapport complet de disponibilité |
| BrokenReason | Raison de l'endommagement de la session, valide lorsque l'état de la session est Broken |
| Exception | Exception spécifique d'endommagement de la session, valide lorsque l'état de la session est Broken |
Dans le rapport de session, vous pouvez consulter la disponibilité de chaque composant via Availability, ou consulter la raison détaillée de l'endommagement lorsque la session est endommagée via BrokenReason.
Exemple de rapport de session
Par exemple, sur Windows, si une session contient ImageTrackerFrameFilter, CameraDeviceFrameSource et plusieurs autres composants de source d'images, le processus d'assemblage vérifiera la disponibilité de chaque composant et générera un rapport comme suit :

On peut voir que même si la propriété Availability du composant ARCoreFrameSource est Unavailable, puisque Availability de ImageTrackerFrameFilter et CameraDeviceFrameSource sont tous deux Available, l'assemblage de la session entière réussit, et la session passe avec succès à l'état Ready.
Si nous supprimons CameraDeviceFrameSource de la session, le processus d'assemblage générera le rapport suivant :

On peut voir que le nombre d'entrées dans la liste FrameSources passe de 9 à 8, et bien que la propriété Availability du composant ImageTrackerFrameFilter soit toujours Available, puisqu'il n'y a pas de composant de source d'images disponible, l'assemblage de la session entière échoue, et la session passe à l'état Broken. À ce stade, la valeur du champ BrokenReason dans le rapport est NoAvailabileFrameSource, indiquant l'absence de source d'images disponible.
Outre le processus d'assemblage, la session peut également être endommagée pendant son exécution, par exemple si un composant en cours d'exécution est supprimé accidentellement. Dans ce cas, la raison spécifique de l'endommagement peut également être consultée via le rapport de session.
Mise à jour des rapports
Le rapport de session change aux moments suivants :
Fin de la première phase d'assemblage
Un rapport de session complet est généré, incluant le rapport de disponibilité des composants. La partie Availability du rapport de session est déterminée à ce moment et ne change plus. Les mises à jour du rapport de disponibilité des composants peuvent être obtenues via l'événement AssembleUpdate.
Si la session est démarrée directement après l'assemblage, les mises à jour du rapport de session peuvent également être obtenues via l'événement StateChanged. Les états de session à surveiller incluent : Ready et Broken.Fin de la deuxième phase d'assemblage Un nouveau rapport de disponibilité des composants est généré. Le rapport de session ne sera pas mis à jour sauf si la session est redémarrée. Les mises à jour du rapport de disponibilité des composants peuvent être obtenues via l'événement AssembleUpdate.
Lorsque la session est endommagée pendant le démarrage ou l'exécution
Les champs BrokenReason et Exception du rapport de session sont mis à jour. Les mises à jour du rapport de session peuvent être obtenues via l'événement StateChanged. L'état de session à surveiller est : Broken.
Contenu du rapport : raisons de l'endommagement de la session
BrokenReason indique la raison de l'endommagement de la session, avec les cas suivants :
| Raison | Description |
|---|---|
| Uninitialized | Processus d'assemblage, EasyAR Sense n'a pas été initialisé avec succès |
| LicenseInvalid | Processus d'assemblage, échec de la validation de la licence EasyAR Sense ou licence non applicable à l'utilisation actuelle |
| SessionObjectIncomplete | Processus d'assemblage, l'objet session est incomplet. Par exemple, RendererFeature n'est pas correctement configuré dans URP |
| NoAvailabileFrameSource | Processus d'assemblage, aucune source d'images disponible. Par exemple, toutes les sources d'images sont indisponibles ou aucune source d'images n'a été ajoutée. Dans et uniquement dans la configuration de session par défaut, cette situation indique que l'appareil ne prend pas en charge la fonctionnalité AR sélectionnée |
| FrameSourceIncomplete | Processus d'assemblage, la source d'images est incomplète. Se produit généralement lors de l'implémentation personnalisée d'une source d'images sans implémentation correcte de l'interface |
| FrameFilterNotAvailabile | Processus d'assemblage, présence d'un filtre d'images non disponible. Cette situation n'existe qu'avec certaines options d'assemblage. |
| StartFailed | Échec du démarrage. Par exemple, une exception s'est produite pendant le démarrage |
| RunningFailed | Échec d'exécution. Par exemple, un composant en cours d'exécution a été supprimé accidentellement, ou RendererFeature n'est pas correctement configuré dans URP, etc. |
Contenu du rapport : informations de disponibilité
Availability fournit des informations sur la disponibilité de chaque composant dans la session. Il contient les champs suivants :
| Champ | Description |
|---|---|
| FrameFilters | Liste de disponibilité des filtres d'images vérifiés pendant l'assemblage |
| FrameSources | Liste de disponibilité des sources d'images vérifiées pendant l'assemblage |
| PendingDeviceList | Tâches de téléchargement de liste d'appareils non terminées |
| DeviceList | Résultat du téléchargement de la liste d'appareils |
Les champs PendingDeviceList et DeviceList indiquent l'état du téléchargement de la liste de prise en charge des appareils. À la fin de la première phase d'assemblage, si et seulement si PendingDeviceList n'est pas vide, l'assemblage passe à la deuxième phase. Vous pouvez utiliser cette condition pour déterminer si AssembleUpdate s'exécutera une deuxième fois.