En esta guía, se describe cómo usar Geospatial Creator para escribir secuencias de comandos de C# con el fin de realizar rápidamente tareas comunes, como crear y mover objetos ARGeospatialCreatorAnchor
en el modo de edición de Unity. Esto puede ser útil para
Creación de varios anclajes a partir de una lista predefinida, como una hoja de cálculo o un archivo KML
.
El Creador de Geospatial en Unity te permite obtener una vista previa del contenido geoespacial en el editor de Unity. En nuestra Guía de inicio rápido, se presenta el Creador de Geospatial y se explica cómo compilar tu primera experiencia de RA habilitada para Geospatial con una programación mínima, a través de la IU del editor de Unity. Para proyectos más avanzados, se recomienda crear y manipular GameObjects del creador geoespacial de manera programática en lugar de usar Unity IU de Editor.
En esta guía, se da por sentado que conoces los conceptos básicos del Creador de Geospatial que se presentaron en la Guía de inicio rápido y que tienes todo listo para comenzar a agregar anclas del Creador de Geospatial a una escena. Deberás tener habilitado el Creador de Geospatial y configurados con tus claves de API y los objetos de sesión de RA iniciales en tu escena. Si comienzas desde cero, sigue la Guía de inicio rápido y incluida la opción "Habilitar Geospatial Creador" antes de continuar.
Cómo comenzar
En este ejemplo, supongamos que tienes un conjunto de ubicaciones conocidas alrededor del Ayuntamiento de San Francisco, California, EE.UU., en las que deseas colocar contenido de RA. Lo que harás crear objetos de ancla en cada una de estas ubicaciones y, luego, conectar la geometría de las anclas.
Antes de crear anclas, debes especificar un
ARGeospatialCreatorOrigin
, que es un punto de referencia para convertir
latitudes, longitudes y latitudes desde y hacia las coordenadas mundiales de Unity.
El origen también contendrá un subcomponente CesiumGeoreference
y un objeto secundario Cesium3DTileset
, lo que permite que Cesium renderice el área circundante en la vista de escena del editor de Unity. Para esto, necesitas un mapa de Google
de Tiles como se describe en el
la Guía de inicio rápido
Crea un origen
La API de Creador de Geospatial incluye un método de fábrica para crear una
ARGeospatialCreatorOrigin
en la escena y agrega los componentes Cesium requeridos.
El siguiente código crea el origen en una latitud, longitud y
y usar la clave de API de Map Tiles determinada:
ARGeospatialCreatorOrigin origin =
GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");
De forma predeterminada, este objeto se coloca en (0, 0, 0) en coordenadas mundiales de Unity, que funciona bien en este ejemplo.
Obtén la referencia de ARAnchorManager
Un objeto ARAnchorManager
para resolver anclas geoespaciales en el tiempo de ejecución, por lo que
También necesitas una referencia a ARAnchorManager
en la escena. Si empezaste con
la aplicación de muestra de Geospatial empaquetada con las extensiones de ARCore, la API de
El administrador está conectado al "Origen de la sesión de RA" GameObject: Si suponemos que tienes
examente un administrador de anclas en tu escena, puedes obtener una referencia a él de la siguiente manera:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Ahora que tienes un origen y un administrador de anclas, puedes comenzar a crear los objetos ARGeospatialCreatorAnchor
.
Crea anclas de terreno
Considera el siguiente array bidimensional de valores double
, que representa
la latitud y la longitud precisas en tres puntos del lado este de
Ayuntamiento de San Francisco, California, EE.UU.:
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
Supongamos que quieres colocar un cubo de un metro en cada una de estas ubicaciones, en el suelo
en nuestra aplicación de RA. El siguiente código crea objetos ARGeospatialCreatorAnchor
y les asigna sus propiedades a los valores adecuados:
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;
}
Esto crea anclas de terreno en cada punto. El Creador de Geospatial coloca automáticamente las anclas en las coordenadas mundiales de Unity adecuadas calculando su ubicación en relación con el objeto ARGeospatialCreatorOrigin
. Para ajustar la altitud de un ancla de terreno, establece la propiedad Altitude
en metros por encima o por debajo de la superficie del terreno.
En el tiempo de ejecución, las anclas de terreno se resolverán a nivel del suelo para la aplicación en ejecución,
compensada por la propiedad Altitude
. Sin embargo, en la vista de escena del Editor,
se renderizan a una altitud de 0 en WGS84 de forma predeterminada, no en relación con el mosaico 3D.
geometría. Suele no ser el lugar donde te gustaría verlos, así que puedes anular el
altitud predeterminada del ancla en la vista de escena del Editor estableciendo la
UseEditorAltitudeOverride
en true
y especificando la altitud en
WGS84 metros con la propiedad EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
Estas dos propiedades no tienen efecto fuera del modo Editor y no se compilan en la app en ejecución.
Crea un ancla de techo
Para nuestra próxima ancla, supongamos que quieres colocar un ancla en la azotea de una ciudad.
Hall. El ancla se puede crear de la misma manera, excepto que la propiedad AltitudeType
se establece en 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;
Al igual que con las anclas de terreno, puedes ajustar la altitud de un techo.
ancla en la vista de escena del Editor con los elementos UseEditorAltitudeOverride
EditorAltitudeOverride
propiedades. En este ejemplo, la altitud WGS84 del techo es de aproximadamente 10.7 metros.
Cómo crear un ancla a una altitud específica
Nuestra última ancla se colocará en la parte superior de la cúpula del Ayuntamiento. Para ancla, la altitud precisa es importante, así que la establecerás explícitamente con un ancla WGS84, en lugar de un ancla de terreno o en el techo:
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;
No es necesario usar la anulación de altitud solo para el editor, ya que la altitud es especificado según WGS84. Por supuesto, si la altura de la geometría de las tarjetas de mapa en el editor resulta incorrecta en comparación con el mundo real, aún puedes usar la anulación del editor para cambiar la posición del ancla en la vista de escena.