夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Microsoft MapsSDK for Unityを使用する 2023年版

本日は久々の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を入手します。

www.bingmapsportal.com

②導入するUnityプロジェクトのエクスプローラーからPackages→manifest.jsonを開きます。

dependenciesの前にscopedRegistriesを追加します。

またdependenciescom.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 MaterialsPackages/com.microsoft.maps.unity.urp/Runtime/Resources/Materials/UnlitTerrainMaterial-URP-MapsSDK.matをアタッチします。

これによってMap上面のシェーダーエラーが解消されます。

Use Custom Clipping Volume MaterialPackages/com.microsoft.maps.unity.urp/Runtime/Resources/Materials/ClippingVolumeMaterial-URP-MapsSDK.matをアタッチします。

これによってすべてのシェーダーエラーが解消されました。

以上でMapsSDKの導入が完了しました。

〇基本操作

基本的にMaps RendererコンポーネントのLatitudeLongitudeの値とZoom Levelの値を任意に与えることで任意の場所の地図を映すことができます。

以上で導入が完了しました。

本日は以上です。