本日は久々のMapsSDK枠です。
現在Osaka MR Hackathonに参加しており、SugorokuXRというテーマですごろくアプリを開発しています。
この中で久々にMapsSDKfor Unityを触りましたので23年版として最新のMapsSDKについてまとめていきます。
〇Microsoft Maps SDK for Untiyとは?
Microsoft Maps SDK for Unity(MapsSDK)はMicrosoftが提供するUnity向け地図アプリ開発SDKです。
Bing Mapsをコア技術としており特徴としてMixedRealityでの使用も前提に構築されているため非常にHoloLensなどのxRデバイスと親和性が高いです。
BingMapsの開発者登録を行う必要がありますが無料で利用できます。
Unity内での2D地図表示として使用できるほかMixedRealityデバイス向けというのもあり、GoogleEarthのように3Dで立体的に建物や地形を表示させることができます。
日本では東京などの一部の都市のみが建物の立体表示に対応していますが、ニューヨークやコロッセオなどの有名観光地が立体表示されています。
また、Unityの座標軸とは別にLatLonと呼ばれる緯度経度をまとめた型を使用することで緯度経度で自身が見たい地形を表示することができるほか、Unityのプレファブをある座標にピン止めすることなどもできます。
〇環境
・Unity2021.3.5f1
・UniversalRP
・MRTK3
〇MapsSDKを使用する
MapsSDKに関しては2年前に使用法について詳しくまとめていました。
最新の環境ではBingMapsのキーの扱いなど一部が変更されています。
①BingMapsの開発者登録を行いAPIKeyを入手します。
②導入するUnityプロジェクトのエクスプローラーからPackages→manifest.jsonを開きます。
③dependenciesの前にscopedRegistriesを追加します。
またdependenciesにcom.microsoft.maps.unityを追加します。
{ "scopedRegistries": [ { "name": "Maps SDK for Unity", "url": "https://unity.virtualearth.net/npm/registry/", "scopes": [ "com.microsoft.maps" ] } ], "dependencies": { "com.microsoft.maps.unity": "0.11.2", ・・・ }
これでUnityを開くことでMapsSDK for Unityが導入されます。
④URPを使用する場合は③の作業に加えて次のパッケージも追加します。
"dependencies": { "com.microsoft.maps.unity": "0.11.2", "com.microsoft.maps.unity.urp": "https://github.com/microsoft/MapsSDK-Unity.git?path=/UPM/com.microsoft.maps.unity.urp", ・・・ }
このサポートパッケージにはURP向けのシェーダーおよびそれを使用したマテリアルが梱包されています。
正常にインポートされるとUnityのPackages内にMaps SDK,a Microsoft Garage Projectが導入されます。
⑤シーンにからのオブジェクトを作成します。ここではmapsと名付けています。
⑥mapオブジェクトにMap Rendererコンポーネントをアタッチします。
これによって以下のコンポーネントがアタッチされます。
・Map Session
BingMapの開発者キーなどを読み取ります。
・Map Renderer
マップの描画と緯度経度の指定を行います。
・Map Copyright Layer
権利関係の署名を行います。 無料で使用している文にはCopyrightは必須となります。
・Map Data Cache
データの解像度やキャッシュの最大値を指定します。
また今回はURPを使用しているためデフォルトで次のようにシェーダーエラーが表示されます。
⑦Assets内にResourcesフォルダを作成します。
⑧Resourcesフォルダ内にMapsSessionConfig.txtというテキストファイルを作成します。
MapsSessionConfig.txtにBing MapsのDev Centerで作成したKeyを入力します。
これによって自動的にMapSesstionコンポーネントによって認証が行われ、Bing Mapsの機能が提供されるようになります。
従来の場合MapSessionコンポーネントに直打ちしていたためGitHubでの共有などの際にKeyが流出する問題がありました。
このような方式をとることでMapsSessionConfig.txtをGit ignoreに加えることで簡単にプロジェクトを共有できるようになりました。
⑨MapSessionコンポーネントのRenderSettings内のUse Custom Terrain MaterialsにPackages/com.microsoft.maps.unity.urp/Runtime/Resources/Materials/UnlitTerrainMaterial-URP-MapsSDK.matをアタッチします。
これによってMap上面のシェーダーエラーが解消されます。
⑩Use Custom Clipping Volume MaterialにPackages/com.microsoft.maps.unity.urp/Runtime/Resources/Materials/ClippingVolumeMaterial-URP-MapsSDK.matをアタッチします。
これによってすべてのシェーダーエラーが解消されました。
以上でMapsSDKの導入が完了しました。
〇基本操作
基本的にMaps RendererコンポーネントのLatitudeとLongitudeの値とZoom Levelの値を任意に与えることで任意の場所の地図を映すことができます。
以上で導入が完了しました。
本日は以上です。