1. 始める前に
Unity の Geospatial Creator は、ARCore と Google Maps Platform の Photorealistic 3D Tiles をベースにしており、これを使用することで、特定の緯度と経度に対して拡張現実(AR)エクスペリエンスを Unity エディタ内で迅速に構築して可視化できます。これにより、アプリの単一の地理位置情報付き AR シーンの構築にかかる時間を大幅に短縮できますが、異なる場所で同様のエクスペリエンスを複数作成したい場合はどうすればよいでしょうか?Geospatial Creator の C# API を使用しても、同様のことができます。
この Codelab では、Geospatial Creator と Google Maps Platform の Places API を使用して、初期テンプレートから複数の地理空間エクスペリエンスを作成する C# コードを記述します。作成されたエクスペリエンスは、アプリにコンパイルする前に Unity エディタで確認して調整できます。
前提条件
- AR に関する基本的な知識
- ARCore Geospatial API に関する基本的な知識
学習内容
- Geospatial Creator で API を使用して、複数の場所で 1 つの地理位置情報エクスペリエンスを作成して可視化する方法。
- Google Maps Platform の Places API を使用して場所の位置を特定する方法。
- AR エクスペリエンスをデバイスで実行する方法
必要なもの
2. 環境を設定する
Geospatial Creator を使用するには、Google Maps Platform の Photorealistic 3D Tiles、Google Cloud の ARCore サービス、Places API にアクセスするための認証を設定する必要があります。
Google Cloud プロジェクトの設定
この Codelab では、Google のサーバー API にアクセスするために、課金が有効になっている Google Cloud プロジェクトが必要です。この Codelab では課金の設定が必要ですが、ご請求が発生するのは、そのプロジェクトが無料サービスの割り当て分を超過した場合のみです。
Google Cloud でプロジェクトを設定する手順は次のとおりです。
- Google Cloud コンソールでプロジェクトを作成します。
- [プロジェクト名] テキスト ボックスに、
ARCore Geospatial Project
などの適切な名前を入力し、任意の場所を選択します。 - [作成] をクリックします。
- Google Cloud コンソールのプロジェクト選択ページで [プロジェクトを作成] をクリックします。
- 課金を有効にするを参照し、Photorealistic 3D Tiles の料金と Places API(新版)の料金を確認してください。
Map Tiles API を有効にする
Map Tiles API は、Unity エディタで表示できる Photorealistic 3D Tiles を提供します。
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] テキスト ボックスに API キーを入力し、
Enter
キーを押します(macOS ではreturn
キー)。 - [Edit] > [Project Settings] > [XR Plug-in Management] > [ARCore Extensions] で、Android または iOS のいずれかに API キー認証を使用し、API キーを挿入します。
- [File] > [Build Settings] で、ターゲット プラットフォームを Android または iOS に切り替えます。
3. 最初のアクティビティを作成する
この Codelab では、複数の場所で使用できる AR アンカーを作成します。カリフォルニア州サンフランシスコの公共図書館を例として使用しますが、お近くの場所を使用してもかまいません。
Geospatial Creator の Origin コンポーネントについて
Geospatial Creator で作成された各 Unity シーンには、Geospatial Creator Origin が 1 つだけ必要です。このゲーム オブジェクトは、現実世界の緯度、経度、高度の値を Unity のゲーム座標に変換するための基準点です。
サンプル プロジェクトには Geospatial Creator Origin が含まれています。これは、Cesium を使用してエディタの Scene
ビューで Photorealistic 3D Tiles をレンダリングし、AR コンテンツが世界のどこに表示されるかを正確に可視化できるようにします。
原点を移動する
Geospatial Creator の原点をサンフランシスコ中央図書館の緯度と経度に移動します。
Geospatial Creator の Places API との組み込み統合を使用して、原点を正しい場所に自動的に再配置する手順は次のとおりです。
- [Hierarchy] パネルで [Geospatial Creator Origin] ゲーム オブジェクトを選択します。
- [インスペクタ] パネルで、[Search for Location](場所を検索)をクリックします。
- 検索ダイアログに「
San Francisco Public Library
」と入力します。1 つ目の結果は Larkin Street 100 番地である必要があります。 - [オブジェクトに適用] をクリックして、検索結果をオリジンに適用します。出発地の緯度と経度が新しい座標に更新されます。
Geospatial Creator アンカーをシーンに追加する
Origin が存在するので、[GameObject] > [XR] > [AR Geospatial Creator Anchor] を使用して Geospatial Creator アンカーを追加します。デフォルトでは、アンカーはオリジンと同じ場所に配置されます。
このアンカーを使用して、3D AR コンテンツを配置します。サンプル プロジェクトには、本の 3D モデルが含まれています。
本をシーンに配置する手順は次のとおりです。
- [Project] パネルで、[Book] モデルを [Editor] ビューペインにドラッグします。
- [Hierarchy] パネルで、Book が前に作成したアンカーの子であることを確認します。Geospatial Creator アンカーの子ゲーム オブジェクトは、アンカーを基準にして配置されます。
- [Hierarchy] パネルで [Book] を選択します。位置の値を 0、0、0 に設定します。
エディタビューでこのモデルを見ると、何かが間違っていることがわかります。アンカーのデフォルトの高度がライブラリの屋根面の下にありますが、実際には屋根面のはるか上に浮かんでいるはずです。
エディタでオブジェクトを移動して WGS84 のおおよその高度を特定することもできますが、この場合は、地理空間アンカーを屋上アンカーとして構成して、構造物の屋上に対する高度を自動的に固定することをおすすめします。
- これを行うには、アンカーのインスペクタ パネルを開き、
Altitude Type
プロパティをRooftop
に設定します。
この操作を行っても、アンカーの高度はエディタビューで変化しません。これは、屋上アンカーと地形アンカーのアンカーが解決されるときに、アンカーの高度が実行時に決定されるためです。Scene
ビューで屋上のアンカーを可視化するには、[タイルにスナップ] ボタンを使用します。これにより、アンカーの高度が Scene
ビューのタイルと一致するように設定されますが、実行時に解決されたアンカーの高度には影響しません。
- モデルをライブラリの屋上に置くのではなく、屋上から 15 メートル上に浮かべるには、
Altitude relative to rooftop
パラメータを屋上から 15 メートル上に変更します。
モデルがライブラリの上にうまく浮いています。
これで、必要な AR システム コンポーネント、Geospatial Creator Origin、モデルがアタッチされたアンカー 1 つを含む、完全な Geospatial 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 エディタで関数を実行します。
- 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 の結果の場所ごとに 1 つのアンカーが作成されます。- Google AR Codelab の新しい [Create New Anchors from Places Response] メニュー項目を使用してアンカーを作成します。
- [Hierarchy] ペインに複数のアンカーが表示されます。
アンカーの位置を確認する
アプリを実行する前に、すべてのアセットが正しい場所に固定されていることを確認する手順は次のとおりです。
- [階層] ペインで、追加したアンカーをクリックします。
- F キーを押します。
Scene
ビューでアンカーを調べます。- アンカーが正しい位置にない場合は、[タイルにスナップ] をクリックするか、
Latitude
、Longitude
、Editor Override Altitude
の値を手動で変更します。
6. アセットを AR で表示する
ARCore に対応した Android デバイスまたは iOS デバイスで AR の中でアセットを表示する手順は次のとおりです。
- [File] > [Build Settings] をクリックし、ビルド プラットフォームとして [Android] または [iOS] を選択します。
- [Switch platform] をクリックします。
- 開発用のデバイスが接続されており、開発用に設定されていることを確認します。
- [ビルドして実行] をクリックします。
- アプリがデバイスで動作することを確認します。
- コンテンツをアンカーした場所を訪れます。例を変更していない場合、場所はサンフランシスコの公共図書館です。
7. まとめ
これで、この Codelab では、Geospatial Creator と Google Maps Platform Places API を使用して、初期テンプレートから複数の地理空間エクスペリエンスを作成する Unity アプリを作成しました。この知識を活用して、Geospatial Creator コンテンツのリーチを拡大していただければ幸いです。