Controlar o processo de rastreamento Mega
Este artigo apresenta como controlar os vários recursos e parâmetros durante o processo de rastreamento Mega para atender às necessidades de diferentes cenários de aplicação.
Antes de começar
- Verifique minha função de localização já pode ser usada? para confirmar que a biblioteca de localização foi criada corretamente e que o mapa foi adicionado.
Fluxo de trabalho do tracker
O fluxo de trabalho do tracker é o seguinte:
flowchart LR
subgraph startup_graph[Início]
direction TB
sstart((session iniciada))
create[Criação nativa]
load(Carregar target)
init_g[[Inicialização]]
end
subgraph init_graph[Inicialização]
direction TB
init_{Inicialização 6DoF bem-sucedida<br>ou não 6DoF}
init[[Processo de inicialização do rastreamento local]]
localization_g[[Localização inicial]]
end
subgraph localization_graph[Localização inicial]
direction TB
localize__{Localização ativada e<br>intervalo de request excedido}
localize[Localização em nuvem]
localize_{Localizado no block e<br>block carregado}
tracking_g[[Rastreamento]]
end
subgraph tracking_graph[Rastreamento]
direction TB
tracking[[Rastreamento contínuo]]
localizet_{Localização ativada e<br>intervalo de request excedido}
localize2[Localização em nuvem]
localize2_{Localizado no block e<br>block carregado}
localization_g2[[Localização inicial]]
end
subgraph stopping_graph[Parar]
direction TB
unload(Descarregar target)
dispose[Destruição nativa]
sstop([session parada])
end
sstart --> create --> load --> init_g
init --> init_ --> |Yes| localization_g
localize --> localize_ --> |Yes| tracking_g
localize_ --> |No| localize__ --> |Yes| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
localizet_ --> |No| tracking
localize2_ --> |No| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
O processo é dividido aproximadamente em várias etapas:
- Inicialização:
- Depois que a session é iniciada, o tracker da camada nativa é criado.
- Depois de Start() do próprio target, ele é carregado no tracker correspondente.
- Inicialização:
- Ao usar uma frame source 6DoF, entra-se no processo de inicialização do rastreamento local.
- Ao usar uma frame source não 6DoF, a etapa de inicialização é ignorada e o processo entra diretamente na etapa de localização inicial.
- Esse processo pode levar algum tempo, está relacionado à complexidade da cena e à capacidade de desempenho do dispositivo, e geralmente também depende do algoritmo usado na camada inferior da frame source.
- Na configuração padrão, o conteúdo dessa etapa não é exibido. Você pode controlar esse comportamento por meio das opções do componente ActiveController.
- Localização inicial:
- Se a localização estiver ativada e o intervalo de solicitação tiver sido excedido, o tracker enviará uma solicitação de localização à nuvem.
- Depois que a localização for bem-sucedida, se o block correspondente ao id retornado pelo serviço de localização já tiver sido carregado, entra-se na etapa de rastreamento; se o block não tiver sido carregado, continua-se aguardando o carregamento do block e a próxima solicitação de localização.
- Depois que a localização falha, o tracker continua aguardando a próxima solicitação de localização.
- Esse processo pode levar algum tempo, dependendo da facilidade de localização da cena, da qualidade da coleta e do mapeamento dos dados e das condições de rede.
- Na configuração padrão, o conteúdo dessa etapa não é exibido. Você pode controlar esse comportamento por meio das opções do componente ActiveController.
- Se a localização estiver ativada e o intervalo de solicitação tiver sido excedido, o tracker enviará uma solicitação de localização à nuvem.
- Rastreamento:
- O tracker rastreia continuamente o block atual.
- Se a localização estiver ativada e o intervalo de solicitação tiver sido excedido, o tracker enviará uma solicitação de localização à nuvem.
- Depois que a localização for bem-sucedida, se o id retornado pelo serviço de localização não tiver mudado, o rastreamento continuará; se o id tiver mudado e o block já tiver sido carregado, ele será alternado para o novo block e o rastreamento continuará; se o id tiver mudado e o block não tiver sido carregado, continua-se aguardando o carregamento do block e a próxima solicitação de localização.
- Depois que a localização falha, o tracker continua rastreando o block atual e aguarda a próxima solicitação de localização.
- Na configuração padrão, nessa etapa apenas o conteúdo sob o nó target em estado de rastreamento (TargetController.IsTracked ==
true) é exibido. Você pode controlar esse comportamento por meio das opções do componente ActiveController.
- Parada:
- Depois que a session para, o target é descarregado e o tracker da camada nativa é destruído.
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 ser executado em quase todos os tipos de fonte de dados de frames, mas diferentes fontes de dados de frames têm impactos diferentes no efeito de rastreamento.
Por padrão, o Mega escolhe a fonte de dados de frames de nível mais alto suportada pelo dispositivo para rastreamento. A session com suporte ao Mega na configuração padrão já foi configurada com suporte a fontes de dados de frames 6DoF e 5DoF.
Para oferecer suporte a uma fonte de dados de frames de determinado nível durante a execução do Mega, duas condições precisam ser atendidas:
- A fonte de dados de frames necessária está no grupo de fontes de dados de frames opcionais da session.
- MegaTrackerFrameFilter.MinInputFrameLevel é maior ou igual ao nível CameraTransformType da fonte de dados de frames necessária.
Por exemplo, para oferecer suporte ao rastreamento 3DoF na session padrão, é necessário:
- Adicionar ThreeDofCameraDeviceFrameSource ao grupo de fontes de dados de frames da session.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel para ThreeDof.
Outro exemplo: para remover o suporte a rastreamento 5DoF na session padrão, é necessário:
- Remover InertialCameraDeviceFrameSource do grupo de fontes de dados de frames da session.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel para SixDof (mesmo que isso não seja modificado, como não há fonte de dados de frames 5DoF, 5DoF não será usado).
Quando nenhuma fonte de dados de frames que atenda às condições estiver disponível, a montagem da session falhará.
Entender o estado atual do sistema
Na configuração padrão da session, as mensagens de UI são exibidas na tela, incluindo informações do estado de rastreamento do Mega.
Quando a localização é bem-sucedida, as informações do serviço Mega conterão o texto de estado Found; quando a localização falha, as informações do serviço Mega conterão o texto de estado NotFound.
Blocks já carregados serão exibidos como Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Nele, <objName> é o nome do objeto de cena correspondente ao block, <name> é o nome do block, e <id> é o ID do block. trackingStatus pode ser Tracking ou NotTracking, indicando respectivamente se o block atual está sendo rastreado.
![]()
Quando a localização é bem-sucedida, as informações do block localizado mas não carregado serão exibidas como Block [scnObj=?]: <name> (<id>).
![]()
Dica
NotFound é um estado normal e aparece com frequência durante todo o processo de trabalho do Mega. Quando esse estado aparece, o rastreamento continua. Normalmente, no desenvolvimento de aplicativos, não é necessário tratar o estado NotFound de forma especial.
O evento MegaTrackerFrameFilter.LocalizationRespond pode ser usado para obter o estado atual da localização e, assim, entender se o sistema encontrou o alvo de rastreamento.
O código a seguir mostra como usar esse evento e como tratar estados anormais comuns 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 servico esta sendo ativado; o usuario final precisa aguardar
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// o limite de QPS foi excedido; alguns usuarios finais podem falhar aleatoriamente na localizacao (a qualidade geral do tracking diminui)
// normalmente e necessario pagar para aumentar o limite de QPS e garantir a qualidade do tracking com o volume atual de usuarios
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token expirado; isso ocorre apenas ao acessar o servico pela interface Token
// para resolver isso, o aplicativo deve solicitar um Token ao seu proprio backend e chamar MegaTrackerFrameFilter.UpdateToken para atualiza-lo
}
}
Se o aplicativo encontrar com frequência o estado MegaTrackerLocalizationStatus.RequestTimeout, isso geralmente indica que as condições de rede do dispositivo para conectar-se ao serviço não são boas. Recomenda-se otimizar o ambiente de rede para melhorar a qualidade do rastreamento. Em cenários em que as condições de rede não podem ser melhoradas, considere aumentar o tempo limite da solicitação.
Nota
Não é possível obter o pose retornado pela localização por meio desse evento.
Na verdade, o pose retornado pela localização não é necessário no desenvolvimento de aplicativos. Depois que a localização retorna, o EasyAR calcula por meio de algoritmos locais um pose mais preciso e o retorna para uso pelo desenvolvedor. Esse pose já está refletido no transform do block. Consulte obter os resultados de execução da session.
Pausar e continuar
As funções de rastreamento e localização do Mega podem ser pausadas e continuadas separadamente.
Pausar rastreamento
Definir MegaTrackerFrameFilter.enabled como false pausa o rastreamento.
Por padrão, depois que o rastreamento é pausado, todo o conteúdo sob os nós de block fica oculto.
Pausar localização
Definir MegaTrackerFrameFilter.EnableLocalization como false pausa a localização.
Aviso
Pausar a localização afetará o efeito de rastreamento e, em geral, não é recomendado. Use sob orientação do suporte técnico da EasyAR.
Se a localização tiver sido pausada durante a execução do aplicativo, informe isso ao relatar problemas à EasyAR.
Controle de serviço e solicitações
Você pode controlar o comportamento de solicitação do serviço modificando os parâmetros do componente MegaTrackerFrameFilter.
Selecionar biblioteca de localização
Selecione o objeto Mega Tracker sob a session e modifique as opções em Service para ajustar a biblioteca de localização conectada. Essa opção deve ser definida antes da session iniciar.
Na configuração padrão, Access Source é Global Config; a configuração de serviço usa a configuração global. Os parâmetros de serviço podem ser modificados em EasyAR > Sense > Mega > Mega Block em Project Settings. Essa configuração afetará todas as sessions que usam essa configuração global.
![]()
Dica
A configuração do serviço pode ser obtida no Centro de Desenvolvimento EasyAR.

Se for necessário usar diferentes bibliotecas de localização em diferentes sessions, defina Access Source como API Key e modifique os parâmetros de serviço abaixo.
![]()
Em scripts, você pode modificar MegaTrackerFrameFilter.ServiceAccessSource e MegaTrackerFrameFilter.ServiceAccessData para obter o mesmo efeito.
Por exemplo, o código a seguir mostra como configurar, antes da inicialização da session, o tracker para usar parâmetros de runtime ao conectar-se ao serviço:
megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
ServerAddress = serverAddress,
APIKey = apiKey,
APISecret = apiSecret,
AppID = appID
};
Intervalo de solicitação e timeout
Selecione o objeto Mega Tracker sob a session e modifique as opções em Request Time Parameters para ajustar o intervalo de tempo e o timeout das solicitações ao serviço.
![]()
Em scripts, você pode modificar MegaTrackerFrameFilter.RequestTimeParameters para obter o mesmo efeito.
Aviso
Modificar o intervalo de solicitação afetará o efeito de rastreamento e, em geral, não é recomendado. Use sob orientação do suporte técnico da EasyAR.
Se o intervalo de solicitação tiver sido modificado durante a execução do aplicativo, informe isso ao relatar problemas à EasyAR.
Alternar biblioteca de localização
Use MegaTrackerFrameFilter.SwitchEndPoint para alternar a biblioteca de localização em runtime. Ao usar essa interface, a imagem da câmera e a session não serão interrompidas.
Tópicos relacionados
- Melhores práticas de AR Session para Mega apresenta como criar e configurar uma AR Session adequada para Mega
- Adicionar alvo de rastreamento Mega apresenta como adicionar um alvo de rastreamento block do Mega e como carregar o modelo do block no Unity Editor para auxiliar o desenvolvimento
- Adicionar um grupo de fontes de dados de frames apresenta como modificar o grupo de fontes de dados de frames da session
- Obter os resultados de execução da session apresenta como obter os resultados de rastreamento dos componentes da session
- Mensagens de UI apresenta como usar mensagens de UI para exibir o estado da session