Azure Spatial Anchors en Unreal
Azure Spatial Anchors es un servicio de Microsoft Mixed Reality, que permite que los dispositivos de realidad aumentada detecten, compartan y conserven puntos de anclaje en el mundo físico. En la documentación siguiente se proporcionan instrucciones para integrar el servicio de Azure Spatial Anchors en un proyecto de Unreal. Si busca más información, consulte el servicio de Azure Spatial Anchors.
Nota:
Unreal Engine 4.26 ahora tiene complementos para la compatibilidad con ARKit y ARCore si usa iOS o Android como destino.
Importante
Los anclajes locales se almacenan en el dispositivo, mientras que los Azure Spatial Anchors se almacenan en la nube. Si tiene pensado almacenar los anclajes localmente en un dispositivo, hay un documento de Anclajes espaciales locales que puede guiarle por el proceso. Tenga en cuenta que puede tener anclajes locales y de Azure en el mismo proyecto sin que existan conflictos.
Requisitos previos
Para completar esta guía, asegúrese de tener:
- El complemento de Microsoft OpenXR instalado (disponible en Unreal Marketplace o GitHub).
- Instalado Unreal versión 4.25 o posterior
- Un proyecto de HoloLens 2 configurado en Unreal
- Leída la información general de Azure Spatial Anchors
- Conocimientos básicos de C++ y Unreal
Obtención de información de cuenta de Azure Spatial Anchors
Antes de usar Azure Spatial Anchors en un proyecto, debe:
-
Crear un recurso de anclajes espaciales y copiar los campos de la cuenta que se enumeran a continuación. Estos valores se usan para autenticar a los usuarios con la cuenta de la aplicación:
- Id. de cuenta
- Clave de cuenta
Para obtener más información, consulte los documentos de autenticación de Azure Spatial Anchors.
Nota:
Azure Spatial Anchors en Unreal 4.25 no admite tokens de autenticación de Azure AD, pero la compatibilidad con esta funcionalidad estará disponible en una versión posterior.
Habilitación de funcionalidades y permisos
HoloLens
Abra Configuración del proyecto HoloLens y habilite la funcionalidad Cliente de Internet:
Android
Para que una aplicación Android muestre un cuadro de diálogo de permisos y permita funcionalidades de ubicación, debe llamar a la función Solicitar permisos de Android antes de intentar iniciar la sesión de Azure Spatial Anchor:
Cree una variable local para los permisos de entrada y rellénela con:
- android.permission.ACCESS_WIFI_STATE
- android.permission.CHANGE_WIFI_STATE
- android.permission.INTERNET
- android.permission.BLUETOOTH
- android.permission.BLUETOOTH_ADMIN
- android.permission.ACCESS_COARSE_LOCATION
- android.permission.ACCESS_FINE_LOCATION
- android.permission.CAMERA
Por último, abra Configuración del proyecto Android y establezca los mismos permisos en el campo Permisos adicionales en Empaquetado avanzado de APK:
iOS
Para compilar una aplicación para iOS, deberá usar Unreal en un equipo Mac. Para empaquetar con una cuenta de desarrollador de Apple, abra Configuración de proyecto iOS, y desplácese hacia abajo hasta la sección Compilación. Active la casilla Firma automática y rellene el id. de equipo de IOS con su id. de equipo.
Para encontrar el id. de equipo, inicie sesión en developer.apple.com, vaya a la pestaña Pertenencia y busque Id. de equipo.
Para mostrar un cuadro de diálogo de permisos y permitir que el dispositivo iOS acceda a la información de la ubicación, debe llamar a las funciones Init Location Services y Start Location Services antes de intentar iniciar la sesión de Azure Spatial Anchor:
Adición de complementos de Azure Spatial Anchors
Sugerencia
Al usar Azure Spatial Anchors para Unreal, hay un complemento de Azure Spatial Anchors y un complemento específico de la plataforma (WMR, ARKit, ARCore, OpenXR). Solo debe tener habilitado un complemento específico de la plataforma a la vez.
HoloLens
Para habilitar los complementos de Azure Spatial Anchors en el editor de Unreal:
- Haga clic en Editar Complementos y busque Azure Spatial Anchors y Azure Spatial Anchors para WMR.
- Active la casilla Enabled (Habilitado) en ambos complementos para permitir el acceso a las bibliotecas de planos técnicos de Azure Spatial Anchors en la aplicación.
Una vez hecho esto, reinicie Unreal Editor para que los cambios de los complementos surtan efecto. El proyecto ahora está listo para usar Azure Spatial Anchors.
Android
Para habilitar los complementos de Azure Spatial Anchors en el editor de Unreal:
- Haga clic en Editar Complementos y busque Azure Spatial Anchors y Azure Spatial Anchors para ARCore.
- Active la casilla Enabled (Habilitado) en ambos complementos para permitir el acceso a las bibliotecas de planos técnicos de Azure Spatial Anchors en la aplicación.
Una vez hecho esto, reinicie Unreal Editor para que los cambios de los complementos surtan efecto. El proyecto ahora está listo para usar Azure Spatial Anchors.
iOS
Para habilitar los complementos de Azure Spatial Anchors en el editor de Unreal:
- Haga clic en Editar Complementos y busque Azure Spatial Anchors y Azure Spatial Anchors para ARKit.
- Active la casilla Enabled (Habilitado) en ambos complementos para permitir el acceso a las bibliotecas de planos técnicos de Azure Spatial Anchors en la aplicación.
- Busque también Servicios de ubicación móvil y Servicios de ubicación móvil: implementación de IOS.
- Active la casilla Habilitado en ambos complementos para permitir que el dispositivo iOS acceda a la ubicación actual.
Una vez hecho esto, reinicie Unreal Editor para que los cambios de los complementos surtan efecto. El proyecto ahora está listo para usar Azure Spatial Anchors.
Inicio de una sesión en Spatial Anchors
Una sesión de Azure Spatial Anchors permite que las aplicaciones cliente se comuniquen con el servicio de Azure Spatial Anchors. Deberá crear e iniciar una sesión de Azure Spatial Anchors para crear, conservar y compartir Azure Spatial Anchors:
- Abra el plano técnico del Pawn (Peón) que está usando en la aplicación.
- Agregue dos variables de cadena para Account ID (ID. de cuenta) y Account Key (Clave de cuenta) y, a continuación, asigne los valores correspondientes de la cuenta de Azure Spatial Anchors para autenticar la sesión.
Para iniciar una sesión de Azure Spatial Anchors:
- Compruebe que se está ejecutando una AR Session (Sesión de AR) en la aplicación de HoloLens, ya que la sesión de Azure Spatial Anchors no puede iniciarse mientras no se esté ejecutando una sesión de AR. Si no tiene una configurada, cree un recurso de AR Session.
- Agregue el evento personalizado Start Azure Spatial Anchors Session (Iniciar sesión de Azure Spatial Anchors) y configúrelo como se muestra en la captura de pantalla siguiente.
- Al crear una sesión no se inicia la sesión de manera predeterminada, lo que le permite configurar la sesión para la autenticación en el servicio de Azure Spatial Anchors.
- Configure la sesión de Azure Spatial Anchors para proporcionar el identificador de cuenta, la clave de cuenta, el dominio de cuenta y la configuración de la localización del curso. Todas las casillas deben estar habilitadas en la configuración de localización del curso para que el servicio de anclaje espacial de Azure pueda usar datos de sensor para buscar anclajes.
- Inicie la sesión de Azure Spatial Anchors, lo que permite a la aplicación crear y ubicar los Azure Spatial Anchors.
Se recomienda limpiar los recursos de Azure Spatial Anchors en el plano técnico Event Graph (Gráfico de eventos) cuando ya no use el servicio:
- Detenga la sesión de Azure Spatial Anchors. La sesión ya no estará en ejecución, pero sus recursos asociados seguirán existiendo en el complemento de Azure Spatial Anchors.
- Destruya la sesión de Azure Spatial Anchors para limpiar los recursos de la sesión de Azure Spatial Anchors aún conocidos por el complemento de Azure Spatial Anchors.
El plano técnico Event Graph (Gráfico de eventos) debe ser similar a la siguiente captura de pantalla:
Creación de un anclaje
Una instancia de Azure Spatial Anchors representa un lugar del mundo físico en el espacio de la aplicación de realidad aumentada, que fija el contenido de la realidad aumentada a ubicaciones físicas. Los Azure Spatial Anchors también se pueden compartir entre distintos usuarios. Este uso compartido permite que el contenido de la realidad aumentada dibujado en diferentes dispositivos se coloque en la misma ubicación del mundo físico.
Para crear un nuevo Azure Spatial Anchor:
- Compruebe que haya una sesión de Azure Spatial Anchors en ejecución. La aplicación no puede crear o conservar un Azure Spatial Anchor cuando no se está ejecutando ninguna sesión de Azure Spatial Anchors.
- Cree u obtenga un Scene Component (Componente de escena) de Unreal cuya ubicación deba conservarse.
- En la imagen siguiente, el componente Scene Component Needing Anchor se usa como variable. Se necesita un componente de escena de Unreal para establecer una transformación del mundo de la aplicación para un AR Pin (Marca de AR) y Azure Spatial Anchor.
Para construir y guardar un Azure Spatial Anchor para un componente de escena de Unreal:
- Llame al Pin Component (Componente de marca) para el componente de escena de Unreal y especifique la World Transform (Transformación de mundos) del componente de escena como la transformación de mundos que se usa para AR Pin (Marca de AR).
- Unreal realiza un seguimiento de los puntos de AR en el espacio de la aplicación mediante AR Pins (Marcas de AR), que se usan para crear un Azure Spatial Anchor. En Unreal, una AR Pin (Marca de AR) es análoga a SpatialAnchor en HoloLens.
- Llame a Create Cloud Anchor (Crear anclaje de nube) con la AR Pin (Marca de AR) recién creada.
- Create Cloud Anchor crea un Azure Spatial Anchor de forma local, pero no en el servicio de Azure Spatial Anchors. Los parámetros del Azure Spatial Anchor, como una fecha de expiración, se pueden establecer antes de crear el Azure Spatial Anchor con el servicio.
- Establezca la expiración del Azure Spatial Anchor. El parámetro Lifetime (Duración) de la función permite al desarrollador especificar en segundos cuánto tiempo debe el servicio mantener el anclaje.
- Por ejemplo, una expiración de una semana tomaría un valor de 60 segundos x 60 minutos x 24 horas x 7 días = 604 800 segundos.
Después de establecer los parámetros de los anclajes, declare el anclaje como listo para guardarse. En el ejemplo siguiente, el Azure Spatial Anchor recién creado se agrega a un conjunto de Azure Spatial Anchors que debe guardarse. Este conjunto se declara como variable para el plano técnico del Pawn (Peón).
Guardado de un anclaje
Después de configurar el Azure Spatial Anchor con sus parámetros, llame a Save Cloud Anchor (Guardar anclaje de nube). Save Cloud Anchor declara el anclaje en el servicio de Azure Spatial Anchors. Cuando la llamada a Save Cloud Anchor se realiza correctamente, el Azure Spatial Anchor está disponible para otros usuarios del servicio de Azure Spatial Anchors.
Nota:
Save Cloud Anchor es una función asincrónica y solo se puede llamar desde un evento de subproceso de juego, como EventTick. Es posible que Save Cloud Anchor no aparezca como una función de plano técnico en el plano técnico personalizado Functions (Funciones). Sin embargo, debe estar disponible en el editor de planos técnicos Event Graph (Gráfico de eventos) del Pawn (Peón).
En el ejemplo siguiente, el Azure Spatial Anchor se almacena en un conjunto durante una devolución de llamada del evento de entrada. Después, el elemento se guarda en EventTick. Se pueden necesitar varios intentos para guardar un Azure Spatial Anchor, en función de la cantidad de datos espaciales que se hayan creado en la sesión de Azure Spatial Anchors. Por eso es conveniente comprobar si la llamada de guardado se realizó correctamente.
Si el anclaje no se guarda, vuelva a agregarlo al conjunto de anclajes que todavía deben guardarse. Los EventTicks futuros intentarán guardar el anclaje hasta que se almacene correctamente.
Una vez que se guarde el anclaje, la transformación de AR Pins (Marcas de AR) actúa como transformación de referencia para colocar contenido en la aplicación. Otros usuarios pueden detectar este anclaje y alinear el contenido de AR para diferentes dispositivos del mundo físico.
Eliminación de un anclaje
Puede eliminar los anclajes del servicio Azure Spatial Anchors llamando a Delete Cloud Anchor (Eliminar anclaje de nube).
Nota:
Delete Cloud Anchor es una función latente y solo se puede llamar desde un evento de subproceso de juego, como EventTick. Es posible que Delete Cloud Anchor no aparezca como una función de plano técnico en el plano técnico personalizado Functions (Funciones). Sin embargo, debe estar disponible en el editor de planos técnicos Event Graph (Gráfico de eventos) del Pawn (Peón).
En el ejemplo siguiente, el anclaje está marcado para su eliminación en un evento de entrada personalizado. A continuación, se intenta la eliminación en EventTick. Si se produce un error en la eliminación del anclaje, agregue el Azure Spatial Anchor al conjunto de anclajes marcados para su eliminación y vuelva a intentarlo en EventTicks posteriores.
El plano técnico Event Graph (Gráfico de eventos) ahora debe ser similar a la siguiente captura de pantalla:
Detección de anclajes preexistentes
Los anclajes existentes pueden ser creados por elementos del mismo nivel con el servicio de Azure Spatial Anchors:
- Obtenga un identificador de Azure Spatial Anchor para el anclaje que desea detectar.
- Se puede obtener un identificador de anclaje para un anclaje creado por el mismo dispositivo en una sesión anterior de Azure Spatial Anchors. También se puede crear y compartir mediante dispositivos del mismo nivel que interactúen con el servicio de Azure Spatial Anchors.
- Agregue un componente AzureSpatialAnchorsEvent al plano técnico del Pawn (Peón).
- Este componente le permite suscribirse a varios eventos de Azure Spatial Anchors, como los eventos a los que se llama cuando se detectan Azure Spatial Anchors.
- Suscríbase a ASAAnchor Located Delegate (Delegado detectado de ASAAnchor) para el componente AzureSpatialAnchorsEvent.
- El delegado permite que la aplicación sepa cuándo se han encontrado nuevos anclajes asociados con la cuenta de Azure Spatial Anchors.
- Con la devolución de llamada del evento, no se crearán de forma predeterminada AR Pins (Marcas de AR) para los Azure Spatial Anchors creados por pares mediante la sesión de Azure Spatial Anchors. Para crear una AR Pin (Marca de AR) para el Spatial Anchor de Azure detectado, los desarrolladores pueden llamar a Create ARPin Around Azure Cloud Spatial Anchor (Crear ARPin en función del anclaje espacial en la nube de Azure).
Para buscar las instancias de Azure Spatial Anchors creadas por los elementos del mismo nivel mediante el servicio de Azure Spatial Anchors, la aplicación tendrá que crear un Monitor de Azure Spatial Anchors:
- Compruebe que haya una sesión de Azure Spatial Anchors en ejecución.
- Cree un AzureSpatialAnchorsLocateCriteria.
- Puede especificar varios parámetros de ubicación, como la distancia desde el usuario o la distancia desde otro anclaje.
- Declare el identificador de Azure Spatial Anchors que busca en AzureSpatialAnchorsLocateCritieria.
- Llame a Create Watcher (Crear monitor).
Ahora, la aplicación comienza a buscar los Azure Spatial Anchors que conoce el servicio de Azure Spatial Anchors, lo que significa que los usuarios pueden localizar los Azure Spatial Anchors creados por sus pares.
Después de localizar el Azure Spatial Anchor, llame a Stop Watcher (Detener monitor) para detener Azure Spatial Anchors Watcher (Monitor de Azure Spatial Anchors) y limpie los recursos del monitor.
El plano técnico Event Graph (Gráfico de eventos) final ahora debe ser similar a la siguiente captura de pantalla:
Siguiente punto de control de desarrollo
Si sigue el recorrido de desarrollo de Unreal que hemos diseñado, significa que ya se encuentra en proceso de explorar los bloques de compilación principales de MRTK. Desde aquí, puede continuar con el siguiente bloque de compilación:
O bien puede saltar a las funcionalidades y las API de la plataforma de realidad mixta:
Puede volver a los puntos de control de desarrollo de Unreal en cualquier momento.