Unity의 Geospatial Creator에서 프로그래매틱 방식으로 앵커 만들기 및 수정

이 가이드에서는 Geospatial Creator를 사용하여 C# 스크립트를 작성하는 방법을 설명합니다. 데이터를 생성하거나 이동시키는 것과 같은 일반적인 작업을 Unity의 수정 모드에 있는 ARGeospatialCreatorAnchor 객체 이는 스프레드시트 또는 KML과 같은 사전 정의된 목록에서 여러 앵커 만들기 파일에서 참조됩니다.

Unity의 Geospatial Creator를 사용하면 생성합니다 빠른 시작 가이드 Geospatial Creator를 소개하고 첫 번째 Google Cloud 함수를 빌드하는 방법을 Unity를 사용하여 최소한의 프로그래밍으로 지리정보 지원 AR 환경 편집기 UI 고급 프로젝트의 경우 프로젝트를 만들고 조작하여 Unity를 사용하는 대신 프로그래매틱 방식으로 Geospatial Creator GameObjects 편집기 UI

이 가이드에서는 사용자가 기본적인 Geospatial Creator 개념에 익숙하다고 가정합니다. Google Cloud Platform에서 지리적 공간(Geospatial)을 크리에이터가 장면에 고정합니다. Geospatial Creator를 사용 설정해야 하며 API 키와 계정의 초기 AR 세션 객체로 장면입니다. 처음부터 시작한다면 빠른 시작 가이드에서 '지리정보 사용 설정' 크리에이터' 섹션을 참조하세요.

시작하기

이 예에서는 서울의 시청 주변에 알려진 위치가 있다고 가정하겠습니다. AR 콘텐츠를 배치할 위치를 선택합니다. 사용자는 다음 작업을 수행합니다. 이러한 각 위치에 앵커 객체를 만든 다음 기본 이미지를 도형을 앵커에 추가합니다.

앵커를 만들려면 먼저 ARGeospatialCreatorOrigin: 변환을 위한 기준점 Unity 세계 좌표와의 위도, 경도, 고도 원본에는 CesiumGeoreference 하위 구성요소와 Cesium이 주변을 렌더링할 수 있는 Cesium3DTileset 하위 객체 영역에 있습니다. 이를 위해서는 Google 지도가 필요합니다. Tiles API 키는 다음을 참고하세요. 빠른 시작

출처 만들기

Geospatial Creator용 API에는 장면에 ARGeospatialCreatorOrigin를 추가하고 필수 Cesium 구성요소를 추가합니다. 다음 코드는 근처의 위도, 경도 및 고도, 주어진 Map Tiles API 키 사용:

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

기본적으로 이 객체는 Unity 세계 좌표의 (0, 0, 0)에 배치됩니다. 이 예에서는 잘 작동합니다.

ARAnchorManager 참조 가져오기

ARAnchorManager 는 런타임 시 지리 공간 앵커를 확인하는 데 필요하므로 장면의 ARAnchorManager 참조도 필요합니다. 만약 ARCore 확장 프로그램과 함께 번들로 제공되는 지리정보 샘플 애플리케이션인 관리자가 'AR 세션 출처'에 연결됨 GameObject. 당신이 가지고 있다고 가정합니다. 정확히 하나의 앵커 관리자가 있으면 다음과 같습니다.

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

이제 출처와 앵커 관리자를 만들었으므로 ARGeospatialCreatorAnchor 객체.

지형 앵커 만들기

다음과 같은 double 값의 2차원 배열을 생각해 보세요. 동쪽을 향하는 세 지점의 정확한 위도와 경도를 미국 캘리포니아주 샌프란시스코 시청:

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

지면에 있는 각 위치에 1미터 큐브를 배치한다고 가정해 봅시다. 보여 드리겠습니다. 다음 코드는 ARGeospatialCreatorAnchor 객체를 만들고 그 속성을 다음과 같습니다.

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;
}

이렇게 하면 각 지점에 지형 앵커가 생성됩니다. Geospatial Creator 자동으로 올바른 Unity 세계 좌표에 앵커를 배치합니다. 이는 ARGeospatialCreatorOrigin 객체를 기준으로 합니다. 지형 앵커의 고도를 설정하려면 Altitude 속성을 미터 위 또는 볼 수 있습니다.

런타임 시, 지형 앵커는 실행 중인 앱의 지면 수준에서 확인되며, Altitude 속성으로 오프셋됩니다. 하지만 에디터의 장면 뷰에서는 기본적으로 3D 타일을 기준으로 하지 않고 WGS84 고도 0에서 렌더링 정의합니다. 이는 광고를 보고 싶은 위치가 아닐 때가 많으므로 를 설정하여 편집기의 장면 뷰에 있는 앵커의 기본 고도를 UseEditorAltitudeOverride 속성을 true로 설정하고 고도를 EditorAltitudeOverride 속성을 사용한 WGS84m:

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

이 두 속성은 편집기 모드 외부에는 영향을 미치지 않으며 실행 중인 앱에 컴파일됩니다.

시청 광장의 지리정보 앵커

루프톱 앵커 만들기

다음 앵커의 경우 도시의 옥상에 앵커 광고를 배치한다고 가정해 보겠습니다. 홀. 앵커는 AltitudeType를 제외하고 정확히 동일한 방식으로 만들 수 있습니다. 속성이 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;

지형 앵커와 마찬가지로 옥상의 고도를 미세 조정할 수 있습니다. UseEditorAltitudeOverride 및 속성 EditorAltitudeOverride개. 이 예에서 지구본의 WGS84 고도는 지붕의 높이는 약 10.7미터입니다.

지붕 위의 지리정보 앵커

특정 고도에 앵커 만들기

최종 앵커는 시청의 돔 맨 위에 배치됩니다. 대상 정확한 고도가 중요합니다. 따라서 정확한 고도를 지형 또는 루프톱 앵커 대신 WGS84 앵커 사용:

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;

편집기 전용 고도 재정의를 사용할 필요가 없습니다. 고도가 이미 WGS84에 따라 지정되어 있습니다. 물론 지도 타일의 높이가 실제와 비교하여 편집기의 도형이 잘못된 것으로 판명되었습니다. 편집기 재정의를 사용하여 장면에서 앵커의 위치를 변경할 수도 있습니다. 합니다.

돔의 지리정보 앵커