Soporte de dispositivos y session report
Debido a las diferencias de hardware y rendimiento entre dispositivos, muchas veces las funciones AR no pueden ejecutarse en todos los dispositivos. Por eso, al usar funciones AR, es muy importante determinar con precisión el soporte del dispositivo actual. Este artículo explica cómo se expresa la disponibilidad de dispositivos en Unity y cómo obtener información de soporte de dispositivos y disponibilidad de session mediante session report (ARSession.Report).
Antes de comenzar
- Conozca los conceptos básicos, la composición y el workflow de session mediante la introducción a ARSession
Soporte de dispositivos, disponibilidad de session y assembly
Los dispositivos soportados por cada función AR son distintos. Por ejemplo, motion tracking tiene ciertos requisitos para los componentes de hardware y normalmente requiere calibración del dispositivo, mientras que image tracking puede ejecutarse en casi cualquier dispositivo con cámara disponible. Por lo tanto, para determinar si una aplicación AR puede ejecutarse en un dispositivo, normalmente debe conocerse qué funciones AR se usan actualmente, o dicho de otro modo, determinar si una session puede ejecutarse en el dispositivo.
En Unity, el proceso anterior se completa durante la etapa de session assembly (Assemble()). El proceso de assembly decide el estado final antes de iniciar la session según los componentes incluidos en la session y el soporte del dispositivo actual.
Si el assembly tiene éxito, la session entra en el estado Ready y puede seguir iniciándose y ejecutándose. Si el assembly falla, la session entra en el estado Broken, y se puede consultar la causa específica del fallo mediante session report (ARSession.Report).
Session report
La propiedad ARSession.Report proporciona el reporte runtime de la session. Un session report contiene los siguientes campos:
| Propiedad | Descripción |
|---|---|
| Availability | Reporte completo de disponibilidad |
| BrokenReason | Razón por la que la session está dañada, válida cuando el estado de la session es Broken |
| Exception | Exception específica de la session dañada, válida cuando el estado de la session es Broken |
En session report, puede consultar la disponibilidad de cada componente mediante Availability, o consultar la razón detallada mediante BrokenReason cuando la session está dañada.
Ejemplo de session report
Por ejemplo, en Windows, si la session contiene ImageTrackerFrameFilter, CameraDeviceFrameSource y varios otros componentes frame source, el proceso de assembly comprobará la disponibilidad de cada componente y generará el siguiente reporte:

Se puede ver que aunque Availability del componente ARCoreFrameSource es Unavailable, como Availability de ImageTrackerFrameFilter y CameraDeviceFrameSource son ambos Available, el assembly de toda la session tiene éxito y la session entra correctamente en el estado Ready.
Si eliminamos CameraDeviceFrameSource de la session, el proceso de assembly generará el siguiente reporte:

Se puede ver que el número de elementos en la lista FrameSources cambia de 9 a 8. Aunque Availability del componente ImageTrackerFrameFilter sigue siendo Available, como no hay ningún componente frame source disponible, el assembly de toda la session falla y la session entra en el estado Broken. En este momento, el valor del campo BrokenReason en el reporte es NoAvailabileFrameSource, lo que indica que no hay frame source disponible.
Además del proceso de assembly, la session también puede dañarse durante runtime, por ejemplo si se elimina accidentalmente un componente en ejecución. En ese caso también puede consultarse la causa específica mediante session report.
Actualización del reporte
Session report cambia en los siguientes momentos:
Finalización de la primera etapa de assembly
En este momento se genera un session report completo, incluido el reporte de disponibilidad de componentes. La parte Availability de session report se determina en este momento y ya no cambia. Puede obtener actualizaciones del reporte de disponibilidad de componentes mediante el evento AssembleUpdate.
Si la session se inicia directamente después del assembly, también puede obtener actualizaciones de session report mediante el evento StateChanged. Los estados de session que requieren atención incluyen: Ready y Broken.Finalización de la segunda etapa de assembly En este momento se genera un nuevo reporte de disponibilidad de componentes. A menos que la session se reinicie, session report no se actualizará. Puede obtener actualizaciones del reporte de disponibilidad de componentes mediante el evento AssembleUpdate.
Cuando la session se inicia o se daña durante runtime
BrokenReason y Exception en session report se actualizarán. Puede obtener actualizaciones de session report mediante el evento StateChanged. Los estados de session que requieren atención incluyen: Broken.
Contenido del reporte: razones de daño de session
BrokenReason indica la razón por la que la session está dañada. Existen los siguientes casos:
| Razón | Descripción |
|---|---|
| Uninitialized | Proceso de assembly: EasyAR Sense no se inicializó correctamente |
| LicenseInvalid | Proceso de assembly: la verificación de license de EasyAR Sense falló o no es aplicable al uso actual |
| SessionObjectIncomplete | Proceso de assembly: el objeto session está incompleto. Por ejemplo, RendererFeature no está configurado correctamente en URP |
| NoAvailabileFrameSource | Proceso de assembly: no hay frame source disponible. Por ejemplo, todos los frame sources no están disponibles o no se agregó ningún frame source. Solo bajo la configuración de session predeterminada, esta situación indica el soporte del dispositivo para la función AR seleccionada actualmente |
| FrameSourceIncomplete | Proceso de assembly: frame source incompleto. Suele ocurrir cuando un custom frame source no implementa correctamente la interface frame source |
| FrameFilterNotAvailabile | Proceso de assembly: existe un frame filter no disponible. Esta situación solo existe bajo algunas opciones de assembly. |
| StartFailed | Fallo al iniciar. Por ejemplo, ocurre una exception durante el inicio |
| RunningFailed | Fallo de runtime. Por ejemplo, un componente en ejecución se elimina accidentalmente, o RendererFeature no está configurado correctamente en URP. |
Contenido del reporte: información de disponibilidad
Availability proporciona información de disponibilidad de cada componente en la session. Contiene los siguientes campos:
| Campo | Descripción |
|---|---|
| FrameFilters | Lista de disponibilidad de frame filter comprobada durante assembly |
| FrameSources | Lista de disponibilidad de frame source comprobada durante assembly |
| PendingDeviceList | Tarea de descarga de lista de dispositivos no finalizada |
| DeviceList | Resultado de descarga de lista de dispositivos |
Los campos PendingDeviceList y DeviceList se usan para indicar el estado de descarga de la lista de soporte de dispositivos. Cuando se completa la primera etapa de assembly, si y solo si PendingDeviceList no está vacío, el assembly entra en la segunda etapa. Puede usar esta condición para determinar si AssembleUpdate se ejecutará por segunda vez.