Table of Contents

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

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:

alt text

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:

alt text

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.

Próximos passos