Suporte de dispositivo e relatório de sessão
Devido às diferenças de hardware e desempenho do dispositivo, a funcionalidade AR muitas vezes não funciona em todos os dispositivos. Portanto, ao usar a funcionalidade AR, é crucial determinar com precisão o suporte do dispositivo atual. Este artigo explica como a disponibilidade do dispositivo é expressada no Unity e como obter informações sobre suporte de dispositivo e disponibilidade da sessão através do relatório de sessão (ARSession.Report).
Antes de começar
- Compreenda os conceitos básicos, componentes e fluxo de trabalho da sessão através de Introdução ao ARSession
Suporte de dispositivo, disponibilidade da sessão e montagem
Cada funcionalidade AR pode suportar dispositivos diferentes. Por exemplo, o rastreamento de movimento tem certos requisitos para componentes de hardware e geralmente requer calibração do dispositivo, enquanto o rastreamento de imagem pode funcionar em quase todos os dispositivos com câmera disponível. Portanto, para determinar se um aplicativo AR pode funcionar em um determinado dispositivo, geralmente é necessário saber quais funcionalidades AR estão sendo usadas ou, em outras palavras, determinar se uma sessão pode funcionar no dispositivo.
No Unity, esse processo de determinação é concluído durante o estágio de montagem da sessão (Assemble()). O processo de montagem determina o estado final da sessão antes da inicialização com base nos componentes incluídos na sessão e no suporte do dispositivo atual.
Se a montagem for bem-sucedida, a sessão entrará no estado Ready e poderá ser iniciada e executada; se a montagem falhar, a sessão entrará no estado Broken, e a causa específica da falha pode ser consultada através do relatório de sessão (ARSession.Report).
Relatório de sessão
A propriedade ARSession.Report fornece o relatório de operação da sessão. Um relatório de sessão contém os seguintes campos:
| Propriedade | Descrição |
|---|---|
| Availability | Relatório completo de disponibilidade |
| BrokenReason | Razão da quebra da sessão, válido quando o estado da sessão é Broken |
| Exception | Exceção específica de quebra da sessão, válido quando o estado da sessão é Broken |
No relatório de sessão, você pode consultar a disponibilidade de cada componente através de Availability ou consultar a causa detalhada da quebra quando a sessão estiver quebrada através de BrokenReason.
Exemplo de um relatório de sessão
Por exemplo, no Windows, se uma sessão contiver ImageTrackerFrameFilter, CameraDeviceFrameSource e vários outros componentes de frame source, o processo de montagem verificará a disponibilidade de cada componente e gerará o seguinte relatório:

Pode-se observar na imagem que, embora a Availability do componente ARCoreFrameSource seja Unavailable, como a Availability de ImageTrackerFrameFilter e CameraDeviceFrameSource é Available, a montagem da sessão inteira é bem-sucedida e a sessão entra com sucesso no estado Ready.
Se removermos CameraDeviceFrameSource da sessão, o processo de montagem gerará o seguinte relatório:

Pode-se observar que o número de itens na lista FrameSources diminuiu de 9 para 8, e embora a Availability do componente ImageTrackerFrameFilter ainda seja Available, como não há componentes de frame source disponíveis, a montagem da sessão inteira falha e a sessão entra no estado Broken. Neste momento, o valor do campo BrokenReason no relatório é NoAvailabileFrameSource, indicando que não há frame source disponível.
Além do processo de montagem, a sessão também pode quebrar durante a operação, como quando um componente em execução é removido acidentalmente. Nesses casos, a causa específica da quebra também pode ser consultada através do relatório de sessão.
Atualização do relatório
O relatório de sessão muda nos seguintes pontos:
Conclusão da primeira fase de montagem
Neste momento, um relatório de sessão completo é gerado, incluindo o relatório de disponibilidade de componentes. A parte Availability do relatório de sessão é determinada neste momento e não muda mais.
Você pode obter atualizações do relatório de disponibilidade de componentes através do evento AssembleUpdate.
Se a sessão for iniciada diretamente após a montagem, você também pode obter atualizações do relatório de sessão através do evento StateChanged. Os estados da sessão a serem observados incluem: Ready e Broken.Conclusão da segunda fase de montagem
Neste momento, um novo relatório de disponibilidade de componentes é gerado. A menos que a sessão seja reiniciada, o relatório de sessão não será atualizado.
Você pode obter atualizações do relatório de disponibilidade de componentes através do evento AssembleUpdate.Quando a sessão quebra durante a inicialização ou operação
Os campos BrokenReason e Exception do relatório de sessão são atualizados.
Você pode obter atualizações do relatório de sessão através do evento StateChanged. O estado da sessão a ser observado é: Broken.
Conteúdo do relatório: razões para quebra da sessão
BrokenReason indica a razão da quebra da sessão, com as seguintes possibilidades:
| Razão | Descrição |
|---|---|
| Uninitialized | Processo de montagem, EasyAR Sense não inicializado com sucesso |
| LicenseInvalid | Processo de montagem, falha na validação da licença EasyAR Sense ou licença não aplicável ao uso atual |
| SessionObjectIncomplete | Processo de montagem, objeto de sessão incompleto. Por exemplo, RendererFeature não configurado corretamente no URP |
| NoAvailabileFrameSource | Processo de montagem, nenhum frame source disponível. Por exemplo, todos os frame sources estão indisponíveis ou nenhum frame source foi adicionado. Em e apenas na configuração de sessão padrão, essa situação indica o suporte da funcionalidade AR selecionada para o dispositivo atual |
| FrameSourceIncomplete | Processo de montagem, frame source incompleto. Geralmente ocorre quando uma frame source personalizada não implementa corretamente a interface de frame source |
| FrameFilterNotAvailabile | Processo de montagem, existe um frame filter indisponível. Esta situação ocorre apenas sob certas opções de montagem. |
| StartFailed | Falha na inicialização. Por exemplo, ocorreu uma exceção durante a inicialização |
| RunningFailed | Falha na execução. Por exemplo, componente em execução removido acidentalmente ou RendererFeature não configurado corretamente no URP. |
Conteúdo do relatório: informações de disponibilidade
Availability fornece informações de disponibilidade para cada componente na sessão. Ele contém os seguintes campos:
| Campo | Descrição |
|---|---|
| FrameFilters | Lista de disponibilidade de frame filters verificados durante o processo de montagem |
| FrameSources | Lista de disponibilidade de frame sources verificados durante o processo de montagem |
| PendingDeviceList | Tarefas de download de lista de dispositivos pendentes |
| DeviceList | Resultado do download da lista de dispositivos |
Os campos PendingDeviceList e DeviceList são usados para indicar o status do download da lista de suporte de dispositivos. Na conclusão da primeira fase de montagem, se e somente se PendingDeviceList não estiver vazio, a montagem entrará na segunda fase. Você pode usar essa condição para determinar se AssembleUpdate será executado pela segunda vez.