En esta guía, se describe cómo usar el Creador de Geospatial para escribir secuencias de comandos de C#
para 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 Unity Editor. Nuestra guía de inicio rápido se presenta el Creador de Geospatial y te indica cómo crear tu primer Experiencia de RA geoespacial con programación mínima, con Unity IU de Editor. 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 asume que conoces los conceptos básicos del Creador de Geospatial que se presentó en la guía de inicio rápido, y está todo listo para que comiences a agregar Geospatial El creador se ancla en 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
Para este ejemplo, supongamos que tiene un conjunto de ubicaciones conocidas alrededor del Ayuntamiento en San Francisco, California, EE.UU., donde quieres 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
, que permite que Cesium renderice el entorno
en la vista Scene 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
exactamente un administrador de anclas en tu escena, puedes obtener una referencia a él, como
esto:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Ahora que tienes un origen y un administrador de anclas, puedes comenzar a crear el
ARGeospatialCreatorAnchor
.
Crear 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
ARGeospatialCreatorAnchor
y asigna sus propiedades a la
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. Creador de Geospatial automáticamente
coloca las anclas en las coordenadas mundiales adecuadas de Unity, calculando su
ubicación relativa al objeto ARGeospatialCreatorOrigin
. Para ajustar el
de un anclaje del terreno, define la propiedad Altitude
en metros por encima o
bajo 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,
renderizar a una altitud de 0 en WGS84 de forma predeterminada, no relacionada 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 compilarse en la aplicación en ejecución.
Cómo crear 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 exactamente de la misma manera, excepto la AltitudeType
se configura como 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. Para este ejemplo, la altitud WGS84 del
que el techo es de unos 10.7 metros.
Cómo crear un ancla a una altitud específica
El anuncio final 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 Map Tiles del editor resultó ser incorrecto en comparación con el mundo real, puedes usar la anulación del editor para cambiar la posición del ancla en la escena vista.