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# pour accomplir rapidement des tâches courantes, comme créer et déplacer Objets ARGeospatialCreatorAnchor en mode Édition d'Unity Cela peut être utile pour créer plusieurs ancres à 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 du contenu Geospatial dans l'éditeur Unity. Notre Guide de démarrage rapide vous présente Geospatial Creator et vous explique comment créer votre premier Expérience de RA géospatiale avec un minimum de programmation à l'aide d'Unity de l'éditeur. Pour les projets plus avancés, vous pouvez créer et manipuler Utiliser des GameObjects Geospatial Creator de manière programmatique au lieu d'utiliser Unity de l'éditeur.

Ce guide part du principe que vous connaissez les concepts de base de Geospatial Creator. présenté dans le guide de démarrage rapide, et vous êtes prêt à ajouter Geospatial Le créateur s'ancre sur une scène. Vous devez activer Geospatial Creator et configurés avec vos clés API, ainsi que les objets de la session de RA initiale . Si vous partez de zéro, suivez le guide de démarrage rapide y compris la case d'option "Activer Créateur" avant de continuer.

Premiers pas

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

Avant de pouvoir créer des ancres, vous devez spécifier un ARGeospatialCreatorOrigin, qui est un point de référence pour la conversion latitudes, longitudes et altitudes depuis et vers les coordonnées mondiales d'Unity. L'origine contiendra également un sous-composant CesiumGeoreference et un élément Objet enfant Cesium3DTileset, qui permet à Cesium d'afficher l'environnement dans la vue "Scene" (Scène) de l'éditeur Unity. Pour cela, vous avez besoin d'un plan Clé API Tiles comme décrit dans le le guide de démarrage rapide

Créer une origine

L'API pour Geospatial Creator inclut une méthode de fabrique permettant de créer un ARGeospatialCreatorOrigin dans la scène et ajoutez les composants Cesium requis. Le code suivant crée le point de départ avec une latitude, une longitude et un point de départ altitude et en utilisant 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é aux coordonnées (0, 0, 0) dans les coordonnées mondiales Unity, qui sont fonctionne bien pour cet exemple.

Obtenir la référence ARAnchorManager

Un ARAnchorManager est nécessaire pour résoudre les ancres géospatiales au moment de l'exécution. ont également besoin d'une référence à ARAnchorManager dans la scène. Si vous avez commencé par l'exemple d'application Geospatial fourni avec les extensions ARCore, l'application Anchor Le gestionnaire est associé à "Origine de la session de RA" GameObject. En supposant que vous avez un seul gestionnaire d'ancres dans votre scène, vous pouvez y faire référence ceci:

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

Maintenant que vous disposez d'une origine et d'un gestionnaire d'ancres, vous pouvez commencer à créer le Objets ARGeospatialCreatorAnchor.

Créer des ancres de relief

Prenons l'exemple du tableau à deux dimensions suivant de valeurs double, qui représente la latitude et la longitude précises en trois points situés du côté est Hôtel de ville de San Francisco, Californie, É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 à chacun de ces emplacements, au niveau du sol. dans notre application de RA. Le code suivant crée ARGeospatialCreatorAnchor et attribue leurs propriétés aux les 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;
}

Cela crée des ancres de relief à chaque point. Geospatial Creator automatiquement place les ancres aux coordonnées mondiales Unity appropriées, en calculant leur position par rapport à l'objet ARGeospatialCreatorOrigin. Pour ajuster le paramètre l'altitude d'une ancre de relief, définissez la propriété Altitude en mètres au-dessus ou en sous le relief.

Lors de l'exécution, les ancres de relief se résolvent au niveau du sol pour l'application en cours d'exécution. par la propriété Altitude. Dans la vue de la scène de l'éditeur, effectuer le rendu par défaut à une altitude WGS84 de 0, et non par rapport à la tuile 3D et la géométrie. Ce n'est généralement pas à cet endroit que vous souhaiteriez les voir. Vous pouvez donc ignorer les l'altitude par défaut de l'ancre dans la vue de la scène dans l'éditeur en définissant UseEditorAltitudeOverride sur true et spécifier l'altitude dans WGS84 mètres à 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.

Ancre géospatiale sur la Plaza de l&#39;hôtel de ville

Créer une ancre de toit

Pour notre prochain ancrage, supposons que vous souhaitiez placer une ancre sur le toit de City Hall. L'ancre peut être créée exactement de la même manière, sauf pour 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 relief, vous pouvez ajuster l'altitude d'un toit. dans la vue de la scène de l'éditeur à l'aide des propriétés UseEditorAltitudeOverride et EditorAltitudeOverride. Dans cet exemple, l'altitude WGS84 du le toit est d'environ 10,7 mètres.

Ancrage géospatial sur le toit

Créer une ancre à une altitude spécifique

Notre dernier ancre sera placé tout en haut du dôme de l'hôtel de ville. Pour cette ancre, la précision de l'altitude étant importante, vous la définirez explicitement à l'aide d'une ancre WGS84, et non d'une ancre de relief 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 disponible dans l'éditeur, car l'altitude est déjà spécifié conformément à la norme WGS84. Bien sûr, si la hauteur des tuiles de carte la géométrie dans l'éditeur s'est avérée incorrecte par rapport au monde réel, vous pouvez toujours utiliser le forçage de l'éditeur pour repositionner l'ancre dans la scène. vue.

Ancrage géospatial sur le dôme