Soporte de dispositivos e informes de session
Debido a las diferencias en hardware y rendimiento de los dispositivos, las funciones de AR a menudo no pueden funcionar en todos los dispositivos. Por lo tanto, es crucial determinar con precisión la compatibilidad del dispositivo actual al utilizar funciones de AR. Este artículo explica cómo se expresa la disponibilidad del dispositivo en Unity y cómo obtener información sobre el soporte del dispositivo y la disponibilidad de la session a través de los informes de session (ARSession.Report).
Antes de comenzar
- Comprende los conceptos básicos, la composición y el flujo de trabajo de una session a través de la Introducción a ARSession
Soporte de dispositivos, disponibilidad de session y ensamblaje
Cada función de AR puede admitir diferentes dispositivos. Por ejemplo, el seguimiento de movimiento tiene ciertos requisitos para los componentes de hardware y generalmente requiere la calibración del dispositivo, mientras que la función de seguimiento de imágenes puede funcionar en casi cualquier dispositivo con una cámara disponible. Por lo tanto, determinar si una aplicación de AR puede ejecutarse en un dispositivo específico generalmente requiere saber qué funciones de AR se están utilizando actualmente, o dicho de otra manera, determinar si una session puede ejecutarse en el dispositivo.
En Unity, este proceso de determinación se realiza durante la fase de ensamblaje de la session (Assemble()). El proceso de ensamblaje determina el estado final de la session antes de su inicio según los componentes incluidos en la session y el soporte del dispositivo actual.
Si el ensamblaje es exitoso, la session entrará en el estado Ready y podrá iniciarse y ejecutarse; si el ensamblaje falla, la session entrará en el estado Broken y se puede consultar la razón específica del fallo a través del informe de session (ARSession.Report).
Informes de session
La propiedad ARSession.Report proporciona el informe de ejecución de la session. Un informe de session contiene los siguientes campos:
| Propiedad | Descripción |
|---|---|
| Availability | Informe completo de disponibilidad |
| BrokenReason | Razón de daño de la session, válido cuando el estado de la session es Broken |
| Exception | Excepción específica de daño de la session, válido cuando el estado de la session es Broken |
En el informe de session, puedes consultar la disponibilidad de cada componente a través de Availability, o consultar la razón detallada del daño cuando la session está dañada mediante BrokenReason.
Ejemplo de un informe de session
Por ejemplo, en Windows, si una session incluye ImageTrackerFrameFilter, CameraDeviceFrameSource y varios otros componentes de fuente de frame, el proceso de ensamblaje verificará la disponibilidad de cada componente y generará un informe como el siguiente:

Se puede observar que, aunque la Availability del componente ARCoreFrameSource es Unavailable, la Availability de ImageTrackerFrameFilter y CameraDeviceFrameSource es Available, por lo que todo el ensamblaje de la session es exitoso y la session entra correctamente en el estado Ready.
Si eliminamos CameraDeviceFrameSource de la session, el proceso de ensamblaje generará el siguiente informe:

Se puede ver que la lista FrameSources se redujo de 9 a 8 elementos, y aunque la Availability del componente ImageTrackerFrameFilter sigue siendo Available, al no haber componentes de fuente de frame disponibles, todo el ensamblaje de la session falla y la session entra en el estado Broken. En este caso, el valor del campo BrokenReason en el informe es NoAvailabileFrameSource, lo que indica que no hay fuentes de frame disponibles.
Además del proceso de ensamblaje, la session también puede dañarse durante su ejecución, por ejemplo, si un componente en ejecución se elimina accidentalmente. En ese caso, también se puede consultar la razón específica del daño a través del informe de session.
Actualización del informe
El informe de session cambiará en los siguientes puntos:
Finalización de la primera fase de ensamblaje
En este momento se genera un informe completo de session, que incluye el informe de disponibilidad de componentes. La parte Availability del informe de session se determina en este punto y no cambia más.
Puedes obtener actualizaciones del informe de disponibilidad de componentes a través del evento AssembleUpdate.
Si la session se inicia directamente después del ensamblaje, también puedes obtener actualizaciones del informe de session a través del evento StateChanged. Los estados de session a observar incluyen: Ready y Broken.Finalización de la segunda fase de ensamblaje
En este punto se genera un nuevo informe de disponibilidad de componentes. A menos que la session se reinicie, el informe de session no se actualizará.
Puedes obtener actualizaciones del informe de disponibilidad de componentes a través del evento AssembleUpdate.Cuando la session se daña durante el inicio o la ejecución
Los campos BrokenReason y Exception del informe de session se actualizarán.
Puedes obtener actualizaciones del informe de session a través del evento StateChanged. El estado de session a observar es: Broken.
Contenido del informe: razones de daño de la session
BrokenReason indica la razón del daño de la session, con las siguientes posibilidades:
| Razón | Descripción |
|---|---|
| Uninitialized | Proceso de ensamblaje, EasyAR Sense no se inicializó correctamente |
| LicenseInvalid | Proceso de ensamblaje, falló la validación de la licencia de EasyAR Sense o no es aplicable al uso actual |
| SessionObjectIncomplete | Proceso de ensamblaje, el objeto de session está incompleto. Por ejemplo, RendererFeature no está configurado correctamente en URP |
| NoAvailabileFrameSource | Proceso de ensamblaje, no hay fuente de frame disponible. Por ejemplo, todas las fuentes de frame no están disponibles o no se agregó ninguna. En y solo en la configuración predeterminada de session, esto indica que el dispositivo no admite la función de AR seleccionada actualmente |
| FrameSourceIncomplete | Proceso de ensamblaje, la fuente de frame está incompleta. Suele ocurrir cuando no se implementa correctamente la interfaz de fuente de frame en fuentes personalizadas |
| FrameFilterNotAvailabile | Proceso de ensamblaje, existe un filtro de frame no disponible. Esto solo ocurre bajo ciertas opciones de ensamblaje. |
| StartFailed | Fallo al iniciar. Por ejemplo, ocurrió una excepción durante el inicio |
| RunningFailed | Fallo durante la ejecución. Por ejemplo, un componente en ejecución se eliminó accidentalmente, o RendererFeature no está configurado correctamente en URP, etc. |
Contenido del informe: información de disponibilidad
Availability proporciona información sobre la disponibilidad de cada componente en la session. Contiene los siguientes campos:
| Campo | Descripción |
|---|---|
| FrameFilters | Lista de disponibilidad de filtros de frame verificados durante el ensamblaje |
| FrameSources | Lista de disponibilidad de fuentes de frame verificadas durante el ensamblaje |
| PendingDeviceList | Tareas pendientes de descarga de la lista de dispositivos |
| DeviceList | Resultado de la descarga de la lista de dispositivos |
Los campos PendingDeviceList y DeviceList se utilizan para indicar el estado de descarga de la lista de soporte de dispositivos. Cuando finaliza la primera fase de ensamblaje, si y solo si PendingDeviceList no está vacío, el ensamblaje pasará a la segunda fase. Puedes usar esta condición para determinar si AssembleUpdate se ejecutará por segunda vez.