🗾

ARCore Geospatial Creator for Unityを使ってみる

2023/05/12に公開

概要

Unity Editor内でGoogle Mapを見ながらGeospatialの設定が行えるARCore Geospatial Creatorがリリースされました
https://developers.google.com/ar/geospatialcreator/unity/quickstart?hl=ja
この機能を使うことにより、ノーコードでGeospatial APIを使ったコンテンツが作成可能になりました

Geospatial APIの基礎的な使い方はこちらの記事を参照してください
https://zenn.dev/tkada/articles/04b44474149130

環境構築

Google Cloud Platform上でAPI KEYを取得する必要があります
↓の手順に従ってAPI KEYを取得してください
https://zenn.dev/tkada/articles/04b44474149130#gcpの設定を行う

さらに今回はMap Tiles APIも有効にする必要があります

Unityのセットアップも以前と同様にGoogle ARCore Extensions for AR Foundationをインストールします
https://zenn.dev/tkada/articles/04b44474149130#unityの準備

追加してCesium for Unityのインストールが必要になりました

https://github.com/CesiumGS/cesium-unity/releases/
からcom.cesium.unity-x.y.z.tgzをダウンロードします

Package Managerの Add package from tarballで先ほどダウンロードした.tgzファイルを指定します

Edit Project Settings->ARCore Extensions->Optional FeaturesでGeospatialGeospatial Creatorにチェックを入れ有効にします
Geospatial Creatorにチェックを入れたときにダイアログが出てくるのでFinishで処理を完了します

これで下準備は完了です

Editor上でGeospatial Creatorを使う

まずサンプル内のGeospatialシーンを開きます
次に右クリックメニューのXR->AR Geospatial Creator Originを選択します

AR Geospatial Creator OriginができたらAdd Cesium Georeference Componentをクリックします

するとMap Tiles API KEYを入力できるフォームが出てくるので、ここに取得したMap Tiles APIのキーを入力します

入力後しばらく待つと、Scene上にマップが現れます

黄色の枠線の部分に緯度(Latitude)・経度(Longitude)・高さ(Height)を入れるとマップも変化します

デフォルトだとかなり高い位置に設定されているので、Heightは20~50くらいに設定すると見やすくなります

また、LayersからUIの表示を消すとScene ViewでUIが表示されなくなるので見やすくなります

アンカーを設定する

右クリックメニューのXR->AR Geospatial Creator Anchorからアンカーを作成します

アンカーは緯度経度を指定して位置を設定することもできますし、シーン上でGameObjectを移動して位置調整することもできます

高さの設定については公式ドキュメントを参照すると

アンカーの緯度と経度を微調整するときに、近くにある場所を選択して、実行時に正しい場所にあることを確認できるようにします。地理空間クリエイター アンカーの高さを設定する場合、次の 3 つのオプションがあります。
[Manual Altitude]は、WGS84 座標系に基づいて、アンカーを特定の高さ(メートル単位)に配置します。WSG84 の高さ「0」は必ずしも海面平均を表すものではなく、GPS の高度とも一致しない可能性があるため、この方法でオブジェクトを配置するにはある程度の試行錯誤が必要になります。また、レンダリングされた 3D タイルの緯度と経度は正確ですが、3D タイルを基準として地面に配置しようとすると、高さが最大数メートルになる場合があります。
[Terrain] では、指定した緯度と経度で地面に対してアンカーが配置されます。地面レベルは Visual Positioning System によって実行時に決定されます。ARCore の Geospatial API の使用経験がない場合は、まず「Terrain」を選択することをおすすめします。アンカーは垂直方向に高い精度で地面に直接解決されるためです。[高度オフセット] フィールドを使用すると、アンカーを地面より上下に固定できます。たとえば、オフセットを「1.0」に指定すると、アンカーが地形から 1 メートル上に「浮いている」ことになります。
Rooftop では、特定の緯度と経度で、建造物の上部の高さに対するアンカーが配置されます。地形アンカーの場合と同様に、[高度オフセット] フィールドを使用して、アンカーを屋根の位置に対して上下に移動できます。
https://developers.google.com/ar/geospatialcreator/unity/quickstart?hl=ja#add_and_place_a_geospatial_creator_anchor

となっています。地表に置きたい場合はTerrainを指定しておくのがいいでしょう

そして、アンカーの子供に表示したいオブジェクトを追加します

ここまでできたらビルドします

なお、Cubeを回転させるのに下記のコードを使用しています

Rotate.cs
using UnityEngine;

public class Rotate : MonoBehaviour
{
    void Update()
    {
        this.transform.localRotation *= Quaternion.AngleAxis(360 * Time.deltaTime, Vector3.up);
    }
}

ビルド出来たら指定した場所の近くまで行ってアプリを起動します
うまく行けば指定した位置にオブジェクトが表示されます
なおマップを表示していた>AR Geospatial Creator AnchorはAR中は消えるようになっているようです

Discussion