이 가이드에서는 Geospatial Creator를 사용하여 C# 스크립트를 작성하여 Unity의 수정 모드에서 ARGeospatialCreatorAnchor
객체를 만들고 이동하는 등의 일반적인 작업을 빠르게 실행하는 방법을 설명합니다. 이는 스프레드시트나 KML 파일과 같은 사전 정의된 목록에서 여러 앵커를 만드는 데 유용할 수 있습니다.
Unity의 Geospatial Creator를 사용하면 Unity 편집기에서 Geospatial 콘텐츠를 미리 볼 수 있습니다. 빠른 시작 가이드에서는 Geospatial Creator를 소개하고 Unity 편집기 UI를 사용하여 최소한의 프로그래밍으로 첫 번째 Geospatial 지원 AR 환경을 빌드하는 방법을 안내합니다. 고급 프로젝트의 경우 Unity 편집기 UI를 사용하는 대신 프로그래매틱 방식으로 Geospatial Creator 게임 객체를 만들고 조작하는 것이 좋습니다.
이 가이드에서는 빠른 시작에서 소개된 기본 Geospatial Creator 개념에 익숙하고 Geospatial Creator 앵커를 장면에 추가할 준비가 되었다고 가정합니다. Geospatial Creator를 사용 설정하고 API 키로 구성해야 하며 장면의 초기 AR 세션 객체도 있어야 합니다. 처음부터 시작하는 경우 빠른 시작 가이드를 '지리적 크리에이터 사용 설정' 섹션까지 모두 완료한 후 계속 진행하세요.
시작하기
이 예에서는 미국 캘리포니아 샌프란시스코의 시청 주변에 AR 콘텐츠를 배치할 알려진 위치가 있다고 가정해 보겠습니다. 이러한 각 위치에 앵커 객체를 만든 다음 이러한 앵커에 기본 도형을 연결해야 합니다.
앵커를 만들려면 먼저 위도, 경도, 고도를 Unity 월드 좌표로 변환하고 변환하는 데 사용되는 참조 지점인 ARGeospatialCreatorOrigin
를 지정해야 합니다.
또한 출처에는 CesiumGeoreference
하위 구성요소와 Cesium3DTileset
하위 객체가 포함되어 Cesium이 Unity 편집기의 장면 뷰에서 주변 영역을 렌더링할 수 있습니다. 이렇게 하려면 빠른 시작에 설명된 대로 Google 지도 카드 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 확장 프로그램과 번들로 제공되는 Geospatial Sample 애플리케이션으로 시작한 경우 앵커 관리자가 'AR Session Origin' 게임 오브젝트에 연결됩니다. 장면에 정확히 하나의 앵커 관리자가 있다고 가정하면 다음과 같이 참조를 가져올 수 있습니다.
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
AR 애플리케이션에서 지상 수준의 각 위치에 1m3의 큐브를 배치하려고 한다고 가정해 보겠습니다. 다음 코드는 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는 ARGeospatialCreatorOrigin
객체를 기준으로 위치를 계산하여 적절한 Unity 월드 좌표에 앵커를 자동으로 배치합니다. 지형 앵커의 고도를 조정하려면 Altitude
속성을 지형 표면 위 또는 아래의 미터 단위로 설정합니다.
런타임 시 지형 앵커는 Altitude
속성으로 오프셋된 실행 중인 앱의 지상 수준에서 확인됩니다. 하지만 편집기의 장면 뷰에서는 3D 카드 도형을 기준으로 하지 않고 기본적으로 WGS84 고도 0으로 렌더링됩니다. 원하는 위치에 배치되지 않는 경우가 많으므로 UseEditorAltitudeOverride
속성을 true
로 설정하고 EditorAltitudeOverride
속성을 사용하여 WGS84 미터 단위로 고도를 지정하여 편집기의 장면 뷰에서 앵커의 기본 고도를 재정의할 수 있습니다.
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.7m입니다.
특정 고도에 앵커 만들기
마지막 앵커는 시청 돔의 맨 꼭대기에 배치됩니다. 이 앵커의 경우 정확한 고도가 중요하므로 지형지물 또는 옥상 앵커 대신 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에 따라 지정되어 있으므로 편집기 전용 고도 재정의를 사용할 필요가 없습니다. 물론 편집기의 지도 타일 도형 높이가 실제와 비교하여 잘못된 것으로 판명되더라도 편집기 재정의를 사용하여 장면 뷰에서 앵커의 위치를 변경할 수 있습니다.