Controlar o processo de rastreamento Mega
Este artigo descreve como controlar várias funções e parâmetros no processo de rastreamento Mega para atender às necessidades de diferentes cenários de aplicação.
Antes de começar
Ajustar o nível de suporte do dispositivo
A propriedade MegaTrackerFrameFilter.MinInputFrameLevel de MegaTrackerFrameFilter é usada para especificar o nível mínimo de dispositivo suportado pelo Mega.
![]()
O Mega pode funcionar em quase todos os tipos de fontes de dados de frame, mas diferentes fontes de dados de frame têm impactos diferentes nos efeitos de rastreamento.
Por padrão, o Mega seleciona a fonte de dados de frame de nível mais alto suportada pelo dispositivo para rastreamento. A sessão suportando Mega com configuração padrão já está configurada com fontes de dados de frame suportando 6DoF e 5DoF.
Para suportar uma fonte de dados de frame de determinado nível durante a execução do Mega, duas condições devem ser atendidas:
- A fonte de dados de frame necessária deve estar no grupo de fontes de dados de frame opcionais da sessão.
- MegaTrackerFrameFilter.MinInputFrameLevel deve ser maior ou igual ao nível de CameraTransformType da fonte de dados de frame necessária.
Por exemplo, para suportar rastreamento 3DoF na sessão padrão, é necessário:
- Adicionar ThreeDofCameraDeviceFrameSource ao grupo de fontes de dados de frame da sessão.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel para ThreeDof.
Outro exemplo, para remover o suporte a rastreamento 5DoF na sessão padrão, é necessário:
- Remover InertialCameraDeviceFrameSource do grupo de fontes de dados de frame da sessão.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel para SixDof (mesmo sem modificação, como não há fonte de dados de frame 5DoF, o 5DoF não será usado).
Se nenhuma fonte de dados de frame que atenda às condições estiver disponível, a montagem da sessão falhará.
Gerenciar alvos de rastreamento
Ao usar o Mega, é necessário especificar o target, ou seja, o block, usado por MegaTrackerFrameFilter.
Controlar a origem do block
Na maioria dos casos, recomenda-se manter a configuração padrão, ou seja, importar o block usando o Mega Studio no editor.
Selecione o objeto Mega Tracker na sessão, a opção Block Root Source deve permanecer como External (padrão).
![]()
Ao mesmo tempo, é necessário especificar Block Root como o objeto MegaBlocks na cena.
![]()
Modificar a opção Block Root Source pode especificar outras formas de origem do block. Por exemplo, ao importar dados usando ema, geralmente é selecionada a opção Internal ou Mixed.
No script, pode-se modificar BlockHolder.BlockRootSource para obter o mesmo efeito.
Controlar o rastreamento de múltiplos alvos
Na maioria dos cenários de uso do Mega, não há necessidade de usar múltiplos alvos. Antes de dominar como evitar que vários blocks interfiram entre si, recomenda-se colocar apenas um block em um banco de dados de localização.
Dica
Em princípio, o Mega calcula a posição do dispositivo em todos os blocks, em vez de selecionar o block que o dispositivo vê do banco de dados de localização. O uso mal considerado pode levar à degradação do efeito devido a confusão de dados, entre outros motivos.
Selecione o objeto Mega Tracker na sessão, modifique a opção Multi Block para ativar ou desativar a função de rastreamento de múltiplos alvos.
![]()
No script, pode-se modificar BlockHolder.MultiBlock para obter o mesmo efeito.
Aviso
Geralmente, apenas um block pode existir simultaneamente em um banco de dados de localização.
Modificar a configuração de múltiplos alvos afetará o efeito de rastreamento e geralmente não é recomendado. Use sob orientação do suporte técnico da EasyAR.
Se esta configuração for modificada durante a execução do aplicativo, informe este ponto ao relatar problemas à EasyAR.
Compreender o estado atual do sistema
Na configuração padrão da sessão, mensagens de UI serão exibidas na tela, contendo informações sobre o estado de rastreamento do Mega.
Quando a localização é bem-sucedida, o Mega Block conterá texto de estado Found junto com o nome e ID do block atualmente rastreado:
![]()
Quando a localização falha, o Mega Block conterá texto de estado NotFound:
![]()
Dica
NotFound é um estado normal e ocorre frequentemente durante todo o processo de trabalho do Mega. Quando este estado ocorre, o rastreamento ainda continua. Geralmente, o desenvolvimento de aplicativos não requer tratamento especial para o estado NotFound.
Usando o evento MegaTrackerFrameFilter.LocalizationRespond, pode-se obter o estado atual da localização, entendendo assim se o sistema encontrou o alvo de rastreamento no momento.
O código a seguir mostra como usar este evento e os métodos comuns de tratamento de estados anormais que exigem atenção do aplicativo:
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// O serviço está acordando, o usuário final precisa esperar
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// Limite QPS excedido, alguns usuários finais falharão aleatoriamente na localização (qualidade geral de rastreamento diminuída)
// Geralmente, é necessário pagar para aumentar o limite QPS a fim de garantir a qualidade de rastreamento sob o volume atual de usuários
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token expirado, isso só ocorre ao acessar o serviço usando a interface Token
// Para resolver este problema, o aplicativo precisa solicitar seu back-end para obter um Token e chamar MegaTrackerFrameFilter.UpdateToken para atualizar
}
}
Se o aplicativo frequentemente encontrar o estado MegaTrackerLocalizationStatus.RequestTimeout, geralmente indica que as condições de rede do dispositivo para conectar ao serviço são ruins. Recomenda-se otimizar o ambiente de rede para melhorar a qualidade de rastreamento. Em cenários onde as condições de rede não podem ser melhoradas, pode-se considerar aumentar o tempo limite da solicitação.
Nota
Não é possível obter a pose retornada pela localização através deste evento.
Na verdade, a pose retornada pela localização não é necessária no desenvolvimento de aplicativos. O EasyAR calculará localmente uma pose mais precisa após o retorno da localização e a retornará para uso pelos desenvolvedores. Esta pose já está refletida no transform do block, podendo ser referenciada em obter o resultado da execução da sessão.
Pausar e continuar
As funções de rastreamento e localização do Mega podem ser pausadas e continuadas separadamente.
Pausar o rastreamento
Definir MegaTrackerFrameFilter.enabled como false pausa o rastreamento.
Por padrão, após pausar o rastreamento, todo o conteúdo sob os nós do block ficará oculto.
Pausar a localização
Definir MegaTrackerFrameFilter.EnableLocalization como false pausa a localização.
Aviso
Pausar a localização afeta o efeito de rastreamento e geralmente não é recomendado. Use sob orientação do suporte técnico da EasyAR.
Se a localização for pausada durante a execução do aplicativo, informe este ponto ao relatar problemas à EasyAR.
Controle de serviço e solicitação
O comportamento de solicitação de serviço pode ser controlado modificando os parâmetros do componente MegaTrackerFrameFilter.
Intervalo e tempo limite da solicitação
Selecione o objeto Mega Tracker na sessão, modifique as opções em Request Time Parameters para ajustar o intervalo entre solicitações de serviço e o tempo limite.
![]()
No script, pode-se modificar MegaTrackerFrameFilter.RequestTimeParameters para obter o mesmo efeito.
Aviso
Modificar o intervalo de solicitação afeta o efeito de rastreamento e geralmente não é recomendado. Use sob orientação do suporte técnico da EasyAR.
Se o intervalo de solicitação for modificado durante a execução do aplicativo, informe este ponto ao relatar problemas à EasyAR.
Alternar banco de dados de localização
Usar MegaTrackerFrameFilter.SwitchEndPoint(ExplicitAddressAccessData, BlockRootController) permite alternar o banco de dados de localização durante a execução. Ao usar esta interface, a imagem da câmera e a sessão não serão interrompidas.
Tópicos relacionados
- Práticas recomendadas de AR Session para Mega introduz como criar e configurar uma AR Session adequada para Mega
- Adicionar alvo de rastreamento Mega introduz como adicionar o alvo de rastreamento block do Mega e como carregar o modelo do block no editor Unity para auxiliar no desenvolvimento
- Adicionar um grupo de fontes de dados de frame introduz como modificar o grupo de fontes de dados de frame da sessão
- Obter o resultado da execução da sessão introduz como obter os resultados de rastreamento dos componentes da sessão
- Mensagens de UI introduz como usar mensagens de UI para exibir o estado da sessão