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

Obtén información para usar anclas de Cloud en tus propias apps.

Requisitos previos

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

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

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 funciones de ancla de Cloud en la configuración de la sesión

Una vez que se haya habilitado la función de Cloud Anchors en tu app, habilita las funciones 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 un Cloud Anchor

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

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

Tu app debe seguir estos pasos para completar el alojamiento de un ancla de Cloud:

  1. Llama a ARAnchorManager.HostCloudAnchorAsync().
  2. Inicia una corrutina para esperar hasta que la promesa genere 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 el Cloud Anchor con ARAnchorManagerExtensions.ResolveCloudAnchorAsync().

Verifica la calidad de la asignación de puntos de referencia

ARCoreExtensions.FeatureMapQuality indica la calidad de los puntos del entorno que ARCore ve en los últimos segundos desde una posición de cámara determinada. Por lo general, los Cloud Anchors alojados con funciones de mayor calidad se resuelven con mayor precisión. Usa ARAnchorManagerExtensions.EstimateFeatureMapQualityForHosting() para obtener una estimación de la calidad del mapa de características para una posición de cámara determinada.

Valor Descripción
Insufficient La calidad de los puntos de características identificados a partir de la pose en los últimos segundos es baja. Este estado indica que ARCore probablemente tendrá más dificultades para resolver la ancla de Cloud. Alienta al usuario a mover el dispositivo para que la posición deseada de Cloud Anchor que desee alojar se pueda ver desde diferentes ángulos.
Sufficient Es probable que la calidad de los puntos de características identificados a partir de la pose en los últimos segundos sea suficiente para que ARCore resuelva correctamente una ancla de Cloud, aunque es probable que se reduzca la precisión de la pose resuelta. Pídele al usuario que mueva el dispositivo para que la posición deseada de la ancla de Cloud que desea alojar se pueda ver desde diferentes ángulos.
Good Es probable que la calidad de los puntos de características identificados a partir de la pose en los últimos segundos sea suficiente para que ARCore resuelva correctamente una Cloud Anchor con un alto grado de precisión.

Cómo resolver un ancla alojada anteriormente

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 determinar la posición y la orientación del usuario en relación con la ancla. Cuando encuentra una coincidencia, la API muestra la pose del ancla de Cloud alojada.

Puedes iniciar resoluciones para varios anclas de Cloud en secuencia. Se pueden realizar hasta 40 operaciones simultáneas de Cloud Anchor a la vez.

Cancela una operación o quita un ancla de Cloud

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

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

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

Valor Descripción
ErrorResolvingCloudIdNotFound No se pudo resolver porque la API de ARCore no pudo encontrar el ID de Cloud Anchor proporcionado.
ErrorHostingDatasetProcessingFailed El hosting falló porque el servidor no pudo procesar correctamente el conjunto de datos para el ancla en cuestión. Vuelve a intentarlo después de que el dispositivo haya recopilado más datos del entorno.
ErrorHostingServiceUnavailable No se pudo 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 cualquier otro problema que pueda afectar la capacidad del dispositivo para conectarse a la API de ARCore.
ErrorInternal Una tarea de alojamiento o resolución para este ancla finalizó con un error interno. La app no debe intentar recuperarse de este error.
ErrorNotAuthorized La app no puede comunicarse con la API de ARCore debido a que la autorización no es válida. Consulta Project Settings > XR > ARCore Extensions 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 resolverlo es más nuevo que la versión que se usa para alojarlo y no es compatible con ella.
ErrorResolvingPackageTooOld No se pudo resolver el ancla de Cloud porque el paquete de extensiones de ARCore que se usa para resolverlo es anterior a la versión que se usa para alojarlo y no es compatible con ella.
ErrorResourceExhausted La aplicación agotó la cuota de solicitudes asignada al proyecto de Google Cloud determinado. Debes solicitar una cuota adicional para la API de ARCore para tu proyecto desde Google Play Console.
Success Se completó correctamente una tarea de hosting o de resolución para esta ancla.

Cuotas de API para solicitudes de host y resolución

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 unlimited N/A proyecto
Solicitudes de host de ancla 30 minuto Dirección IP y proyecto
Cómo fijar solicitudes de resolución 300 minuto Dirección IP y proyecto

Prácticas recomendadas para una buena experiencia del usuario

Instruye a los usuarios a hacer lo siguiente para garantizar una buena experiencia en tu app:

  • Espera unos segundos después de que comience la sesión antes de intentar alojar un ancla (colocando un objeto, etcétera). Esto le da tiempo al seguimiento para estabilizarse.
  • Cuando selecciones 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 las que carecen de características visuales, como las paredes blancas sin ningún elemento.
  • Mantén la cámara enfocada en el centro de interés y mueve el dispositivo alrededor de él para asignar el entorno desde diferentes ángulos y mantener aproximadamente la misma distancia física mientras lo haces. Esto ayudará a capturar más datos visuales y a 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 las anclas de Cloud.

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 de ARCore 1.11.0 o versiones anteriores no pueden alojar ni resolver anclas de Cloud debido a que el SDK usa una API de ARCore anterior y obsoleta.

¿Qué sigue?