Créer et modifier des ancres dans Geospatial Creator dans Unity par programmation

Ce guide explique comment utiliser Geospatial Creator pour écrire des scripts C# afin d'effectuer rapidement des tâches courantes telles que la création et le déplacement d'objets ARGeospatialCreatorAnchor en mode Édition d'Unity. Cela peut être utile pour créer plusieurs ancrages à partir d'une liste prédéfinie, telle qu'une feuille de calcul ou un fichier KML.

Geospatial Creator dans Unity vous permet de prévisualiser le contenu géospatial dans l'éditeur Unity. Notre guide de démarrage rapide présente Geospatial Creator et explique comment créer votre première expérience de RA compatible avec Geospatial Creator avec un minimum de programmation, à l'aide de l'interface utilisateur de l'éditeur Unity. Pour des projets plus avancés, vous pouvez créer et manipuler des objets Geospatial Creator de manière programmatique plutôt que d'utiliser l'interface utilisateur de l'éditeur Unity.

Ce guide suppose que vous connaissez les concepts de base de Geospatial Creator présentés dans le guide de démarrage rapide et que vous êtes prêt à commencer à ajouter des ancrages Geospatial Creator à une scène. Vous devez activer et configurer Geospatial Creator avec vos clés API, ainsi que les objets de session AR initiaux dans votre scène. Si vous commencez à zéro, suivez le guide de démarrage rapide, y compris la section Activer Geospatial Creator, avant de continuer.

Premiers pas

Pour cet exemple, supposons que vous disposiez d'un ensemble d'emplacements connus autour de l'hôtel de ville de San Francisco (Californie, États-Unis), où vous souhaitez placer du contenu RA. Vous devrez créer des objets d'ancrage à chacun de ces emplacements, puis associer une géométrie de base à ces ancrages.

Avant de pouvoir créer des ancrages, vous devez spécifier un ARGeospatialCreatorOrigin, qui est un point de référence pour convertir les latitudes, les longitudes et les altitudes en coordonnées mondiales Unity et depuis celles-ci. L'origine contient également un sous-composant CesiumGeoreference et un objet enfant Cesium3DTileset, ce qui permet à Cesium d'afficher la zone environnante dans la vue de scène de l'éditeur Unity. Pour ce faire, vous avez besoin d'une clé API Google Maps Tiles, comme décrit dans le guide de démarrage rapide.

Créer une origine

L'API de Geospatial Creator inclut une méthode de fabrique permettant de créer un ARGeospatialCreatorOrigin dans la scène et d'ajouter les composants Cesium requis. Le code suivant crée l'origine à une latitude, longitude et altitude proches, et à l'aide de la clé API Map Tiles donnée:

ARGeospatialCreatorOrigin origin =
  GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
    37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");

Par défaut, cet objet est placé à (0, 0, 0) dans les coordonnées mondiales d'Unity, ce qui convient parfaitement à cet exemple.

Obtenir la référence ARAnchorManager

Un ARAnchorManager est nécessaire pour résoudre les ancrages géospatiaux au moment de l'exécution. Vous avez donc également besoin d'une référence à l'ARAnchorManager dans la scène. Si vous avez commencé avec l'application exemple Geospatial incluse avec les extensions ARCore, le Gestionnaire d'ancrage est associé à l'objet de jeu "Origine de la session AR". En supposant que vous disposiez d'un seul gestionnaire d'ancrage dans votre scène, vous pouvez obtenir une référence à celui-ci comme suit:

ARAnchorManager anchorManager =
    Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];

Maintenant que vous disposez d'une origine et d'un gestionnaire d'ancrage, vous pouvez commencer à créer les objets ARGeospatialCreatorAnchor.

Créer des ancrages de terrain

Prenons l'exemple du tableau à deux dimensions de valeurs double suivant, qui représente la latitude et la longitude précises à trois points sur le côté est de l'hôtel de ville de San Francisco, en Californie, aux États-Unis:

double[,] _cityHallEastPoints = {
    { 37.77936, -122.418617 }, // in front of city hall
    { 37.77965, -122.418680 }, // right of city hall
    { 37.77917, -122.418577 }}; // left of city hall

Supposons que vous souhaitiez placer un cube d'un mètre cube à chacun de ces emplacements, au niveau du sol, dans notre application de RA. Le code suivant crée des objets ARGeospatialCreatorAnchor et attribue leurs propriétés aux valeurs appropriées:

for (int i = 0; i < _cityHallEastPoints.GetLength(0); i++)
{
  ARGeospatialCreatorAnchor anchor =
    new GameObject("City Hall " + i).AddComponent<ARGeospatialCreatorAnchor>();
  anchor.Origin = origin;
  anchor.AnchorManager = anchorManager;
  anchor.Latitude = _cityHallEastPoints[i, 0];
  anchor.Longitude = _cityHallEastPoints[i, 1];
  anchor.AltitudeType = AnchorAltitudeType.Terrain;

  GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
  cube.transform.parent = anchor.transform;
}

Des ancrages de terrain sont ainsi créés à chaque point. Geospatial Creator place automatiquement les ancrages aux coordonnées mondiales Unity appropriées en calculant leur position par rapport à l'objet ARGeospatialCreatorOrigin. Pour ajuster l'altitude d'un ancrage de terrain, définissez la propriété Altitude en mètres au-dessus ou en dessous de la surface du terrain.

Au moment de l'exécution, les ancrages de terrain se résolvent au niveau du sol pour l'application en cours d'exécution, décalés par la propriété Altitude. Toutefois, dans la vue de la scène de l'éditeur, ils s'affichent à une altitude WGS84 de 0 par défaut, et non par rapport à la géométrie des tuiles 3D. Ce n'est souvent pas là que vous souhaitez les voir. Vous pouvez donc remplacer l'altitude par défaut de l'ancre dans la vue de scène de l'éditeur en définissant la propriété UseEditorAltitudeOverride sur true et en spécifiant l'altitude en mètres WGS84 à l'aide de la propriété EditorAltitudeOverride:

anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza

Ces deux propriétés n'ont aucun effet en dehors du mode Éditeur et ne sont pas compilées dans l'application en cours d'exécution.

Geospatial Anchor sur la place de l&#39;hôtel de ville

Créer une ancre sur le toit

Pour notre prochaine ancre, supposons que vous souhaitiez placer une ancre sur le toit de la mairie. L'ancre peut être créée exactement de la même manière, sauf que la propriété AltitudeType est définie sur AnchorAltitudeType.Rooftop:

ARGeospatialCreatorAnchor cityHallRoofAnchor =
  new GameObject("City Hall Roof").AddComponent<ARGeospatialCreatorAnchor>();
cityHallRoofAnchor.Origin = origin;
cityHallRoofAnchor.AnchorManager = anchorManager;
cityHallRoofAnchor.Latitude = 37.77959;
cityHallRoofAnchor.Longitude = -122.419006;
cityHallRoofAnchor.AltitudeType = AnchorAltitudeType.Rooftop;

GameObject roofCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
roofCube.transform.parent = cityHallRoofAnchor.transform;

Comme pour les ancrages de terrain, vous pouvez ajuster l'altitude d'un ancrage sur le toit dans la vue de scène de l'éditeur à l'aide des propriétés UseEditorAltitudeOverride et EditorAltitudeOverride. Dans cet exemple, l'altitude WGS84 du toit est d'environ 10,7 mètres.

Ancrage géospatial sur le toit

Créer un ancrage à une altitude spécifique

Notre dernière ancre sera placée tout en haut du dôme de l'hôtel de ville. Pour cette ancre, l'altitude précise est importante. Vous devez donc la définir explicitement à l'aide d'une ancre WGS84, plutôt que d'une ancre de terrain ou de toit:

ARGeospatialCreatorAnchor cityHallDomeAnchor =
  new GameObject("City Hall Dome").AddComponent<ARGeospatialCreatorAnchor>();
cityHallDomeAnchor.Origin = origin;
cityHallDomeAnchor.AnchorManager = anchorManager;
cityHallDomeAnchor.Latitude = 37.77928;
cityHallDomeAnchor.Longitude = -122.419241;
cityHallDomeAnchor.AltitudeType = AnchorAltitudeType.WGS84;
cityHallDomeAnchor.Altitude = 73;

GameObject domeCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
domeCube.transform.parent = cityHallDomeAnchor.transform;

Il n'est pas nécessaire d'utiliser le forçage de l'altitude réservé à l'éditeur, car l'altitude est déjà spécifiée conformément à WGS84. Bien entendu, si la hauteur de la géométrie des tuiles de carte dans l'éditeur s'avère incorrecte par rapport au monde réel, vous pouvez toujours utiliser le forçage de l'éditeur pour repositionner l'ancre dans la vue de la scène.

Ancrage géospatial sur le dôme