Controlar el proceso de seguimiento de Mega
Este articulo presenta como controlar las funciones y parametros del proceso de seguimiento de Mega para satisfacer las necesidades de distintos escenarios de aplicacion.
Antes de empezar
- Compruebe Mi funcion de localizacion ya se puede usar? para confirmar que la biblioteca de localizacion se haya creado correctamente y que se hayan agregado mapas.
Flujo de trabajo del tracker
El flujo de trabajo del tracker es el siguiente:
flowchart LR
subgraph startup_graph[Inicio]
direction TB
sstart((session iniciada))
create[Creación nativa]
load(Cargar target)
init_g[[Inicialización]]
end
subgraph init_graph[Inicialización]
direction TB
init_{Inicialización 6DoF correcta<br>o no 6DoF}
init[[Proceso de inicialización de seguimiento local]]
localization_g[[Localización inicial]]
end
subgraph localization_graph[Localización inicial]
direction TB
localize__{Localización activada y<br>superado el intervalo de solicitud}
localize[Localización en la nube]
localize_{Localizado en block y<br>block cargado}
tracking_g[[Seguimiento]]
end
subgraph tracking_graph[Seguimiento]
direction TB
tracking[[Seguimiento continuo]]
localizet_{Localización activada y<br>superado el intervalo de solicitud}
localize2[Localización en la nube]
localize2_{Localizado en block y<br>block cargado}
localization_g2[[Localización inicial]]
end
subgraph stopping_graph[Detener]
direction TB
unload(Descargar target)
dispose[Destrucción nativa]
sstop([session detenida])
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
El flujo se divide aproximadamente en varias fases:
- Inicio:
- Despues de que la session se inicie, se crea el tracker de la capa nativa.
- Despues de Start() del propio target, se carga en el tracker correspondiente.
- Inicializacion:
- Al usar un frame source 6DoF, entra en el proceso de inicializacion de seguimiento local.
- Al usar un frame source no 6DoF, se omite la fase de inicializacion y se entra directamente en la fase de localizacion inicial.
- Este proceso puede tardar cierto tiempo, relacionado con la complejidad de la escena y el rendimiento del dispositivo, y normalmente tambien con el algoritmo usado por la capa inferior del frame source.
- Con la configuracion predeterminada, el contenido de esta fase no se muestra. Puede controlar este comportamiento mediante las opciones del componente ActiveController.
- Localizacion inicial:
- Si la localizacion esta habilitada y se supera el intervalo de solicitud, el tracker enviara una solicitud de localizacion a la nube.
- Tras localizar correctamente, si el block correspondiente al id devuelto por el servicio de localizacion ya esta cargado, se entra en la fase de seguimiento; si el block no esta cargado, se sigue esperando a que termine la carga del block y a la siguiente solicitud de localizacion.
- Tras fallar la localizacion, el tracker sigue esperando la siguiente solicitud de localizacion.
- Este proceso puede tardar cierto tiempo, dependiendo de la facilidad de localizacion de la escena, la calidad de captura y mapeo de los datos y el estado de red.
- Con la configuracion predeterminada, el contenido de esta fase no se muestra. Puede controlar este comportamiento mediante las opciones del componente ActiveController.
- Si la localizacion esta habilitada y se supera el intervalo de solicitud, el tracker enviara una solicitud de localizacion a la nube.
- Seguimiento:
- El tracker seguira continuamente el block actual.
- Si la localizacion esta habilitada y se supera el intervalo de solicitud, el tracker enviara una solicitud de localizacion a la nube.
- Tras localizar correctamente, si el id devuelto por el servicio de localizacion no cambia, continua el seguimiento; si el id cambia y el block ya esta cargado, cambia al nuevo block y continua el seguimiento; si el id cambia y el block no esta cargado, sigue esperando a que termine la carga del block y a la siguiente solicitud de localizacion.
- Tras fallar la localizacion, el tracker sigue siguiendo el block actual y espera la siguiente solicitud de localizacion.
- Con la configuracion predeterminada, en esta fase solo se muestra el contenido bajo el nodo target que esta en estado de seguimiento (TargetController.IsTracked ==
true). Puede controlar este comportamiento mediante las opciones del componente ActiveController.
- Detencion:
- Despues de que la session se detiene, el target se descarga y el tracker de la capa nativa se destruye.
Ajustar el nivel de compatibilidad del dispositivo
La propiedad MegaTrackerFrameFilter.MinInputFrameLevel de MegaTrackerFrameFilter se usa para especificar el nivel minimo de dispositivo admitido por Mega.
![]()
Mega puede ejecutarse sobre casi todos los tipos de fuentes de datos de fotogramas, pero distintas fuentes de datos de fotogramas afectan de forma diferente al efecto de seguimiento.
De forma predeterminada, Mega elegira para seguimiento la fuente de datos de fotogramas de mayor nivel admitida por el dispositivo. La session compatible con Mega con configuracion predeterminada ya esta configurada con fuentes de datos de fotogramas que admiten 6DoF y 5DoF.
Para admitir en runtime de Mega una fuente de datos de fotogramas de cierto nivel, deben cumplirse dos condiciones:
- La fuente de datos de fotogramas requerida esta en el grupo opcional de fuentes de datos de fotogramas de la session.
- MegaTrackerFrameFilter.MinInputFrameLevel es mayor o igual que el nivel CameraTransformType de la fuente de datos de fotogramas requerida.
Por ejemplo, para admitir seguimiento 3DoF en la session predeterminada, debe:
- Agregar ThreeDofCameraDeviceFrameSource al grupo de fuentes de datos de fotogramas de la session.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel a ThreeDof.
Otro ejemplo: para eliminar la compatibilidad con seguimiento 5DoF en la session predeterminada, debe:
- Eliminar InertialCameraDeviceFrameSource del grupo de fuentes de datos de fotogramas de la session.
- Modificar MegaTrackerFrameFilter.MinInputFrameLevel a SixDof (aunque no lo modifique, 5DoF no se usara porque no hay fuente de datos de fotogramas 5DoF).
Cuando no hay ninguna fuente de datos de fotogramas disponible que cumpla las condiciones, el ensamblaje de la session fallara.
Conocer el estado actual del sistema
Con la configuracion predeterminada de session, los mensajes UI se muestran en pantalla e incluyen informacion del estado de seguimiento de Mega.
Cuando la localizacion tiene exito, la informacion del servicio Mega contiene el texto de estado Found; cuando falla, contiene el texto de estado NotFound.
Los blocks ya cargados se muestran como Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Donde <objName> es el nombre del objeto de escena correspondiente al block, <name> es el nombre del block y <id> es el ID del block. trackingStatus puede ser Tracking o NotTracking, que indican respectivamente si el block actual esta siendo seguido.
![]()
Cuando la localizacion tiene exito, la informacion del block localizado pero no cargado se muestra como Block [scnObj=?]: <name> (<id>).
![]()
Consejo
NotFound es un estado normal y aparece con frecuencia durante todo el funcionamiento de Mega. Cuando aparece este estado, el seguimiento sigue continuando. Normalmente no es necesario tratar especialmente el estado NotFound durante el desarrollo de la aplicacion.
Puede usar el evento MegaTrackerFrameFilter.LocalizationRespond para obtener el estado actual de localizacion y asi saber si el sistema ha encontrado el target de seguimiento.
El codigo siguiente muestra como usar este evento y como tratar estados anormales comunes a los que la aplicacion debe prestar atencion:
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)
{
// el servicio se esta activando; el usuario final debe esperar
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// se ha superado el limite de QPS; algunos usuarios finales pueden fallar aleatoriamente al localizarse (la calidad general del tracking disminuye)
// normalmente se debe pagar para aumentar el limite de QPS y garantizar la calidad de tracking con el volumen actual de usuarios
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// el Token ha caducado; esto solo ocurre al acceder al servicio mediante la interfaz de Token
// para resolverlo, la aplicacion debe solicitar un Token a su propio backend y llamar a MegaTrackerFrameFilter.UpdateToken para actualizarlo
}
}
Si la aplicacion encuentra con frecuencia el estado MegaTrackerLocalizationStatus.RequestTimeout, normalmente indica que el estado de red del dispositivo al conectar con el servicio no es bueno. Se recomienda optimizar el entorno de red para mejorar la calidad de seguimiento. Si no se puede mejorar la red, puede considerar aumentar el timeout de solicitud.
Nota
No se puede obtener el pose devuelto por la localizacion mediante este evento.
De hecho, el pose devuelto por la localizacion no es necesario en el desarrollo de aplicaciones. EasyAR calcula mediante algoritmos locales un pose mas preciso despues de la respuesta de localizacion y lo devuelve al desarrollador. Ese pose ya se refleja en el transform del block; puede consultar obtener resultados de ejecucion de la session.
Pausar y continuar
Las funciones de seguimiento y localizacion de Mega se pueden pausar y continuar por separado.
Pausar seguimiento
Establecer MegaTrackerFrameFilter.enabled en false puede pausar el seguimiento.
De forma predeterminada, despues de pausar el seguimiento, se ocultara todo el contenido bajo todos los nodos block.
Pausar localizacion
Establecer MegaTrackerFrameFilter.EnableLocalization en false puede pausar la localizacion.
Advertencia
Pausar la localizacion afectara el efecto de seguimiento y normalmente no se recomienda modificarlo. Uselo bajo la guia del soporte tecnico de EasyAR.
Si la localizacion se pauso durante la ejecucion de la aplicacion, indiquelo obligatoriamente al informar problemas a EasyAR.
Control de servicio y solicitudes
Puede controlar el comportamiento de solicitudes al servicio modificando los parametros del componente MegaTrackerFrameFilter.
Seleccionar biblioteca de localizacion
Seleccione el objeto Mega Tracker bajo la session y modifique las opciones bajo Service para ajustar la biblioteca de localizacion conectada. Esta opcion debe configurarse antes de iniciar la session.
Con la configuracion predeterminada, Access Source es Global Config; la configuracion del servicio usa la configuracion global. Los parametros del servicio pueden modificarse en Project Settings > EasyAR > Sense > Mega > Mega Block. Esta configuracion afecta a todas las sessions que usan esta configuracion global.
![]()
Consejo
La configuracion del servicio se puede obtener desde EasyAR Developer Center.

Si necesita usar distintas bibliotecas de localizacion en distintas sessions, puede establecer Access Source en API Key y luego modificar los parametros del servicio abajo.
![]()
En script, puede modificar MegaTrackerFrameFilter.ServiceAccessSource y MegaTrackerFrameFilter.ServiceAccessData para lograr el mismo efecto.
Por ejemplo, el codigo siguiente muestra como configurar antes del inicio de la session el tracker para conectar con el servicio usando parametros de runtime:
megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
ServerAddress = serverAddress,
APIKey = apiKey,
APISecret = apiSecret,
AppID = appID
};
Intervalo y timeout de solicitudes
Seleccione el objeto Mega Tracker bajo la session y modifique las opciones bajo Request Time Parameters para ajustar el intervalo de solicitudes al servicio y el timeout.
![]()
En script, puede modificar MegaTrackerFrameFilter.RequestTimeParameters para lograr el mismo efecto.
Advertencia
Modificar el intervalo de solicitud afectara el efecto de seguimiento y normalmente no se recomienda. Uselo bajo la guia del soporte tecnico de EasyAR.
Si el intervalo de solicitud se modifico durante la ejecucion de la aplicacion, indiquelo obligatoriamente al informar problemas a EasyAR.
Cambiar biblioteca de localizacion
Puede usar MegaTrackerFrameFilter.SwitchEndPoint para cambiar de biblioteca de localizacion durante la ejecucion. Al usar esta interfaz, la imagen de la camara y la session no se interrumpen.
Temas relacionados
- Buenas practicas de AR Session para Mega presenta como crear y configurar una AR Session adecuada para Mega
- Agregar target de seguimiento Mega presenta como agregar el target de seguimiento block de Mega y como cargar el modelo block en el editor Unity para ayudar al desarrollo
- Agregar un grupo de fuentes de datos de fotogramas presenta como modificar el grupo de fuentes de datos de fotogramas de la session
- Obtener resultados de ejecucion de la session presenta como obtener los resultados de seguimiento de los componentes de la session
- Mensajes UI presenta como usar mensajes UI para mostrar el estado de la session