1. 시작하기 전에
ARCore 및 Google Maps Platform의 포토리얼리스틱 3D 타일로 구동되는 Unity의 Geospatial Creator를 사용하면 Unity 편집기 내에서 특정 위도와 경도에 대한 증강 현실 (AR) 환경을 빠르게 빌드하고 시각화할 수 있습니다. 이렇게 하면 앱의 위치정보가 포함된 단일 AR 장면을 빌드하는 데 걸리는 시간을 크게 줄일 수 있지만 여러 위치에서 유사한 환경을 만들고 싶다면 어떻게 해야 할까요? Geospatial Creator의 C# API를 사용해도 됩니다.
이 Codelab에서는 Geospatial Creator와 Google Maps Platform의 Places API를 사용하여 초기 템플릿을 기반으로 여러 지리 공간 환경을 만드는 C# 코드를 작성합니다. 결과 환경은 앱으로 컴파일되기 전에 Unity Editor에서 탐색하고 미세 조정할 수 있습니다.

기본 요건
- AR 관련 기본 지식
- ARCore Geospatial API 관련 기본 지식
학습할 내용
- Geospatial Creator에서 API를 사용하여 여러 위치에 하나의 지리적 위치 환경을 만들고 시각화하는 방법
- Google Maps Platform의 Places API를 사용하여 장소의 위치를 찾는 방법
- 기기에서 AR 환경을 실행하는 방법
필요한 항목
2. 환경 설정
Geospatial Creator를 사용하려면 Google Cloud의 포토리얼리스틱 3D 타일, ARCore 서비스, Google Maps Platform의 Places API에 액세스할 수 있도록 승인을 설정해야 합니다.
Google Cloud 프로젝트 설정
이 Codelab에서는 Google 서버 API에 액세스하기 위해 결제가 사용 설정된 Google Cloud 프로젝트가 필요합니다. 이 Codelab에는 결제 설정이 필요하지만 프로젝트가 무료 서비스 할당량을 초과하는 경우에만 요금이 청구됩니다.
Google Cloud에서 프로젝트를 설정하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 프로젝트를 만듭니다.

- 프로젝트 이름 텍스트 상자에 적절한 이름(예:
ARCore Geospatial Project)을 입력한 다음 위치를 선택합니다. - 만들기를 클릭합니다.
- 프로젝트 선택기 페이지의 Google Cloud 콘솔에서 프로젝트 만들기를 클릭합니다.
- 결제 사용 설정을 참고하고 실사 3D 타일 가격 및 Places API (신규) 가격을 검토하세요.
Map Tiles API 사용 설정
Map Tiles API는 Unity 편집기에 표시되는 실사 3D 타일을 제공합니다.
ARCore API 사용 설정
Google Cloud의 ARCore API를 사용하면 타겟 기기에서 ARCore Geospatial API에 액세스할 수 있습니다.
Places API 사용 설정
Google Maps Platform의 Places API를 사용하면 2억 개가 넘는 장소의 위치 데이터를 가져올 수 있으며, Codelab에서 이를 사용하여 관련 장소를 찾습니다. 이 API는 장소의 검색 결과와 지리 좌표를 제공합니다.
프로젝트에 대한 API 키 만들기
API 키 인증을 사용하여 원격 Google Cloud 서비스로 앱을 인증하려면 다음 단계를 따르세요.
- Google Cloud 콘솔의 API 및 서비스에서 사용자 인증 정보를 선택합니다.
- 페이지 상단에서 사용자 인증 정보 만들기를 클릭한 다음 API 키를 선택합니다.
- 다음 단계에서 필요하므로 키를 기록해 둡니다.
소프트웨어 설정
Geospatial Creator 소프트웨어를 시작하려면 다음 단계를 따르세요.
- 이 저장소를 클론합니다.
- Unity Hub를 다운로드하고 이를 사용하여 Unity 버전 2022.3을 설치합니다. Android 또는 iOS 선택적 빌드 도구를 설치해야 합니다.
- Unity Hub에서 추가 > 디스크에서 프로젝트 추가를 누릅니다.
- Hierarchy(계층 구조) 패널에서 AR Geospatial Creator Origin을 선택합니다.
- Google Maps Tile API Key(Google 지도 타일 API 키) 텍스트 상자에서 API 키를 삽입한 다음
Enter(macOS의 경우return) 키를 누릅니다.
- Edit(수정) > Project Settings(프로젝트 설정) > XR Plug-in Management(XR 플러그인 관리) > ARCore Extensions(ARCore 확장)에서 Android 또는 iOS에 API 키 인증을 사용하고 API 키를 삽입합니다.
- File(파일) > Build Settings(빌드 설정)에서 타겟 플랫폼을 Android 또는 iOS로 전환합니다.
3. 첫 번째 앵커 만들기
이 Codelab에서는 여러 위치에서 사용할 수 있는 AR 앵커를 만듭니다. 캘리포니아주 샌프란시스코의 공공 도서관을 예로 사용하지만 가까운 위치를 사용해도 됩니다.
Geospatial Creator의 Origin 구성요소 정보
Geospatial Creator로 빌드된 각 Unity 장면에는 정확히 하나의 Geospatial Creator Origin이 필요합니다. 이 게임 객체는 실제 위도, 경도, 고도 값을 Unity 게임 좌표로 변환하는 기준점입니다.
샘플 프로젝트에는 Geospatial Creator Origin이 포함되어 있습니다. 이 Origin은 Cesium을 사용하여 편집기의 Scene 뷰에서 포토리얼리스틱 3D 타일을 렌더링하고 AR 콘텐츠가 표시될 위치를 정확하게 시각화할 수 있도록 해 줍니다.
원점 이동
Geospatial Creator 원점을 샌프란시스코 메인 라이브러리 지점의 위도와 경도로 이동합니다.
Geospatial Creator의 Places API와의 기본 제공 통합을 사용하여 원점을 올바른 위치로 자동 이전하려면 다음 단계를 따르세요.
- Hierarchy(계층 구조) 패널에서 Geospatial Creator Origin 게임 객체를 선택합니다.
- 인스펙터 패널에서 위치 검색을 클릭합니다.
- 검색 대화상자에
San Francisco Public Library를 입력합니다. 첫 번째 결과는 100 Larkin Street여야 합니다. - 객체에 적용을 클릭하여 검색 결과를 원본에 적용합니다. 시작점의 위도와 경도가 새 좌표로 업데이트됩니다.

장면에 Geospatial Creator 앵커 추가
이제 Origin이 있으므로 GameObject > XR > AR Geospatial Creator Anchor를 사용하여 Geospatial Creator 앵커를 추가합니다. 기본적으로 앵커는 원점과 동일한 위치에 배치됩니다.
이 앵커를 사용하여 3D AR 콘텐츠를 배치합니다. 샘플 프로젝트에는 책의 3D 모델이 포함되어 있습니다.
장면에 책을 배치하려면 다음 단계를 따르세요.
- Project 패널에서 Book 모델을 Editor 뷰 창으로 드래그합니다.
- 계층 구조 패널에서 Book이 이전에 만든 앵커의 하위 요소인지 확인합니다. 지오스페이셜 Creator 앵커의 모든 하위 게임 객체는 앵커를 기준으로 배치됩니다.
- Hierarchy(계층 구조) 패널에서 Book을 선택합니다. 위치 값을 0, 0, 0으로 설정합니다.

편집기 뷰에서 이 모델을 보면 문제가 명확하게 드러납니다. 앵커의 기본 고도가 라이브러리 지붕 표면 아래에 있는 반면, 라이브러리 지붕 표면 위로 높이 떠 있어야 합니다.
편집기에서 객체를 이동하여 대략적인 WGS84 고도를 찾을 수 있지만, 이 경우 지리 공간 앵커를 옥상 앵커로 구성하여 고도가 위에 있는 구조물의 옥상에 상대적으로 자동으로 고정되도록 하는 것이 좋습니다.
- 이렇게 하려면 앵커의 인스펙터 패널을 열고
Altitude Type속성을Rooftop로 설정합니다.

이렇게 하면 편집기 뷰에서 앵커의 고도가 변경되지 않습니다. 이는 옥상 및 지형 앵커의 앵커가 확인될 때 런타임에 앵커의 고도가 결정되기 때문입니다. Scene 뷰에서 옥상의 앵커를 시각화하려면 타일에 맞추기 버튼을 사용하면 됩니다. 이렇게 하면 런타임에 확인된 앵커의 고도에 영향을 주지 않으면서 Scene 뷰의 타일과 일치하도록 앵커의 고도가 설정됩니다.
- 모델이 라이브러리 옥상에 놓이는 대신 옥상 위로 떠 있도록 하려면
Altitude relative to rooftop매개변수를 옥상 위 15미터로 변경합니다.
이제 모델이 라이브러리 위로 멋지게 떠 있습니다.

이제 프로젝트에 필요한 모든 AR 시스템 구성요소, Geospatial Creator Origin, 모델이 연결된 앵커 하나를 포함한 완전한 지리정보 AR 장면이 있습니다.
그런 다음 추가 라이브러리 위치에 중복 앵커를 만듭니다.
4. Places API로 새로운 앵커 위치 찾기
Google Maps Platform의 Places API를 사용하면 2억 개가 넘는 장소의 위치 데이터를 가져올 수 있습니다. 이 Codelab에서는 이 API를 사용하여 샌프란시스코에 있는 다른 공개 라이브러리의 지점을 찾고, 이 결과를 사용하여 다음 10개의 검색 결과에 대한 Geospatial Creator 앵커를 생성합니다.
- 먼저 Assets > Scripts > Editor를 클릭한 다음 '
AnchorDuplicator.cs' 파일을 엽니다. 이 파일은 Places API를 시작하고 결과를 파싱하는 데 도움이 되는 상용구 코드를 제공합니다.
Places API로 인증
AnchorDuplicator클래스에서 다음 줄을 찾습니다.private const string API_KEY = "<YOUR_API_KEY_HERE>";- <YOUR_API_KEY_HERE>를 설정 단계에서 가져온 키로 바꿉니다.
Places API에 검색어 쿼리
Places API 승인 설정이 완료되면 POST 요청을 시작하는 코드를 작성할 수 있습니다.
- 이렇게 하려면
CreatePlacesRequest메서드를 찾아 다음 메서드 정의를 사용하세요. 이제string postBody = "{ \"textQuery\": \"" + searchTerm + "\", " + " \"locationBias\": { \"circle\": { " + " \"center\": { \"latitude\": " + lat + ", \"longitude\": " + lon + " }, " + " \"radius\": 10000 }" + " }" + "}"; string url = "https://places.googleapis.com/v1/places:searchText"; UnityWebRequest request = UnityWebRequest.Post(url, postBody, "application/json"); request.SetRequestHeader("X-Goog-Api-Key", apiKey); request.SetRequestHeader("X-Goog-FieldMask", "places.displayName,places.location"); return request;CreatePlacesRequest메서드가 호출되면lat및lon를 중심으로 하는 원에서searchTerm를 검색하는 요청이 이루어집니다.
작업 테스트
계속하기 전에 Places API 호출이 성공했는지 확인해야 합니다.
- Unity Editor에서 함수를 실행합니다.
- Google AR Codelab에서 Run Places Request를 클릭합니다.
- Unity 콘솔을 엽니다. 결과가 표시됩니다.

5. 프로그래매틱 방식으로 장소에 앵커 추가
이제 Places API가 결과를 찾는지 확인했으므로 결과에 지정된 각 위치에 새 Geospatial Creator 앵커를 만듭니다.
메뉴 항목 만들기
AnchorDuplicator클래스에서CreateNewAnchorsFromPlaces메서드를 찾아 다음 메서드 정의를 사용합니다. 이 메뉴 항목은 이전에 시작된 요청을 확인하고 장면의 첫 번째if (_places == null) { Debug.LogError("Cannot create anchors: Places has not been initialized."); return; } // You start with only one anchor in the scene, which you want to copy: var prototypeAnchorObject = GameObject .FindObjectOfType<ARGeospatialCreatorAnchor>() .gameObject; foreach (var place in _places) { var newAnchorObject = GameObject.Instantiate(prototypeAnchorObject); var anchor = newAnchorObject.GetComponent<ARGeospatialCreatorAnchor>(); anchor.Latitude = place.location.latitude; anchor.Longitude = place.location.longitude; newAnchorObject.name = place.displayName.text; }ARGeospatialCreatorAnchor를 Places API 결과의 장소당 하나씩 앵커를 만드는 프로토타입으로 사용합니다.- Google AR Codelab에서 새로운 장소 응답에서 새 앵커 만들기 메뉴 항목을 사용하여 앵커를 만듭니다.
- 계층 구조 창에 여러 앵커가 표시됩니다.
앵커 위치 확인
앱을 실행하기 전에 모든 애셋이 올바른 위치에 고정되어 있는지 확인하려면 다음 단계를 따르세요.
- 계층 구조 창에서 추가된 앵커를 클릭합니다.
- F 키를 누릅니다.
Scene뷰에서 앵커를 검사합니다.- 앵커가 올바른 위치에 있지 않으면 타일에 맞추기를 클릭하거나
Latitude,Longitude또는Editor Override Altitude값을 수동으로 변경합니다.
6. AR로 애셋 보기
ARCore가 지원되는 Android 또는 iOS 기기에서 AR로 애셋을 보려면 다음 단계를 따르세요.
- File(파일) > Build Settings(빌드 설정)를 클릭한 다음 Android 또는 iOS 빌드 플랫폼을 선택합니다.
- Switch platform(플랫폼 전환)을 클릭합니다.
- 개발 기기가 연결되어 있고 개발용으로 구성되어 있는지 확인합니다.
- Build and run(빌드 및 실행)을 클릭합니다.
- 앱이 기기에서 실행되는지 확인합니다.
- 콘텐츠를 고정한 위치를 방문합니다. 예를 변경하지 않은 경우 위치는 샌프란시스코의 공공 도서관입니다.

7. 결론
축하합니다. Geospatial Creator와 Google Maps Platform Places API를 사용하여 초기 템플릿을 기반으로 여러 공간 환경을 만드는 Unity 앱을 작성했습니다. 이 지식을 활용하여 Geospatial Creator 콘텐츠의 도달범위를 확장할 수 있기를 바랍니다.