Guía para desarrolladores de Cloud Anchors para Unity (AR Foundation)

Obtén más información sobre cómo usar Cloud Anchors en tus propias apps.

Requisitos previos

Asegúrate de comprender los conceptos fundamentales de RA y cómo configurar una sesión de ARCore antes de continuar.

Si es la primera vez que usas Cloud Anchors, asegúrate de comprender cómo funcionan las anclas y Cloud Anchors.

Habilita la API de ARCore

Antes de usar Cloud Anchors en tu app, primero debes habilitar la API de ARCore en la aplicación.

Habilita las capacidades de Cloud Anchor en la configuración de la sesión

Una vez que se haya habilitado la funcionalidad de Cloud Anchors en tu app, habilita las capacidades de Cloud Anchors en la configuración de la sesión de RA de tu app para que pueda comunicarse con la API de ARCore:

Aloja una Cloud Anchor

El hosting comienza con una llamada a ARAnchorManager.HostCloudAnchorAsync(). ARCore subirá datos visuales, poses del dispositivo y la postura del ancla a la API de ARCore. Luego, la API procesa esta información para construir un mapa de atributos en 3D y, en última instancia, muestra un ID de Cloud Anchor único para el ancla en el dispositivo.

También puedes extender la vida útil de un ancla alojada con la API de Cloud Anchor Management de ARCore.

Tu app debe seguir estos pasos para completar el hosting de una Cloud Anchor:

  1. Llama a ARAnchorManager.HostCloudAnchorAsync().
  2. Inicia una corrutina para esperar hasta que la promesa produzca un resultado. Consulta Corrutinas en Unity para obtener más información.
  3. Verifica el estado del resultado para determinar si la operación se realizó correctamente o interpreta el código de error si falló.
  4. Comparte el ID de Cloud Anchor resultante con otros clientes y úsalo para resolver la Cloud Anchor con ARAnchorManagerExtensions.ResolveCloudAnchorAsync().

Comprobar la calidad de la asignación de los puntos de componentes

ARCoreExtensions.FeatureMapQuality indica la calidad de los puntos del componente que ARCore ve en los segundos anteriores desde una posición de cámara determinada. Por lo general, las Cloud Anchors alojados con funciones de calidad más alta se resuelven con mayor precisión. Usa ARAnchorManagerExtensions.EstimateFeatureMapQualityForHosting() para obtener una estimación de la calidad del mapa de componentes para una pose de cámara determinada.

Valor Descripción
Insufficient La calidad de los puntos de atributos identificados a partir de la pose en los segundos previos es baja. Este estado indica que es probable que ARCore tenga más dificultades para resolver Cloud Anchor. Alienta al usuario a mover el dispositivo para que se pueda ver la posición deseada de la Cloud Anchor que desea alojar desde diferentes ángulos.
Sufficient La calidad de los puntos de atributos identificados desde la pose en los segundos anteriores es probable que sea suficiente para que ARCore resuelva correctamente una Cloud Anchor, aunque es probable que se reduzca la exactitud de la pose resuelta. Alienta al usuario a mover el dispositivo para que se pueda ver la posición deseada de la Cloud Anchor que desea alojar desde diferentes ángulos.
Good La calidad de los puntos de atributos identificados desde la pose en los segundos anteriores es probable que sea suficiente para que ARCore resuelva correctamente una Cloud Anchor con un alto grado de precisión.

Cómo resolver un ancla alojada previamente

Llama a ARAnchorManagerExtensions.ResolveCloudAnchorAsync() para resolver un Cloud Anchor alojado. La API de ARCore compara periódicamente las características visuales de la escena con el mapa de características 3D del ancla para identificar la posición y la orientación del usuario en relación con el ancla. Cuando encuentra una coincidencia, la API muestra la pose del Cloud Anchor alojado.

Puedes iniciar resoluciones para varias Cloud Anchors en secuencia. Pueden existir hasta 40 operaciones simultáneas de Cloud Anchor a la vez.

Cancela una operación o quita una Cloud Anchor

Se llama automáticamente a ARCloudAnchor.OnDestroy() cuando se quita el componente ARCloudAnchor del objeto de juego que lo contiene. Esto desvinculará y liberará el objeto nativo subyacente de Cloud Anchor.

Verifica el estado del resultado de una operación de Cloud Anchor

Usa CloudAnchorState para verificar el estado del resultado de la operación de hosting o resolución, incluidos los errores.

Valor Descripción
ErrorResolvingCloudIdNotFound No se pudo resolver el problema porque la API de ARCore no pudo encontrar el ID de Cloud Anchor proporcionado.
ErrorHostingDatasetProcessingFailed Se produjo un error en el hosting porque el servidor no pudo procesar correctamente el conjunto de datos del ancla especificada. Vuelve a intentarlo cuando el dispositivo haya recopilado más datos del entorno.
ErrorHostingServiceUnavailable No se podía acceder a la API de ARCore. Esto puede suceder por varios motivos. Es posible que el dispositivo esté en modo de avión o que no tenga una conexión a Internet que funcione. Es posible que se haya agotado el tiempo de espera de la solicitud enviada al servidor sin respuesta. Es posible que haya una conexión de red deficiente, falta de disponibilidad de DNS, problemas de firewall o algún otro problema que pueda afectar la capacidad del dispositivo para conectarse a la API de ARCore.
ErrorInternal Una tarea de hosting o resolución para este ancla finalizó con un error interno. La app no deberá intentar recuperarse de este error.
ErrorNotAuthorized La app no puede comunicarse con la API de ARCore debido a una autorización no válida. Consulta Configuración del proyecto > XR > Extensiones de ARCore para obtener una estrategia de autorización válida.
ErrorResolvingPackageTooNew No se pudo resolver Cloud Anchor porque el paquete de extensiones de ARCore que se usó para resolver Cloud Anchor es más reciente que la versión que se usa para alojarlo y, además, no es compatible con ella.
ErrorResolvingPackageTooOld No se pudo resolver Cloud Anchor porque el paquete de extensiones de ARCore que se usó para resolver Cloud Anchor es más antiguo que la versión que se usa para alojarlo y, además, no es compatible con ella.
ErrorResourceExhausted La aplicación agotó la cuota de solicitudes asignada al proyecto de Google Cloud determinado. Solicita una cuota adicional para la API de ARCore de tu proyecto en Google Play Console.
Success Una tarea de hosting o resolución para esta ancla se completó correctamente.

Cuotas de la API para alojar y resolver solicitudes

La API de ARCore tiene las siguientes cuotas para el ancho de banda de solicitudes:

Tipo de cuota Máximo Duración Se aplica a
Cantidad de anclas ilimitados No disponible proyecto
Solicitudes host fijas 30 minuto Dirección IP y proyecto
Fijar solicitudes resolve 300 minuto Dirección IP y proyecto

Prácticas recomendadas para una buena experiencia del usuario

Indica a los usuarios que hagan lo siguiente para garantizar una buena experiencia del usuario en tu app:

  • Espera unos segundos después de que se inicie la sesión antes de intentar alojar un ancla (colocando un objeto, etcétera). De esta manera, el seguimiento puede estabilizarse.
  • Al seleccionar una ubicación para alojar el ancla, intenta encontrar un área con características visuales que se puedan distinguir fácilmente entre sí. Para obtener mejores resultados, evita las superficies reflectantes o que carezcan de características visuales, como paredes blancas en blanco.
  • Mantén la cámara entrenada en el centro de interés y mueve el dispositivo alrededor de este para mapear el entorno desde diferentes ángulos y mantener más o menos la misma distancia física que lo haces. Esto ayudará a capturar más datos visuales y lograr que la resolución sea más sólida.

  • Asegúrate de que haya suficiente iluminación en el entorno real mientras alojas y resuelves Cloud Anchors.

Política de baja

  • Las apps compiladas con el SDK de ARCore 1.12.0 o versiones posteriores están cubiertas por la política de baja de la API de Cloud Anchor.
  • Las apps compiladas con el SDK 1.11.0 o versiones anteriores de ARCore no pueden alojar ni resolver Cloud Anchors debido al uso de una API de ARCore antigua y obsoleta.

Próximos pasos