本日はイベント登壇記事です。
〇HoloLens ゆるっとLT会とは?
〇Microsoft Map-SDK for Unityで簡単なアプリを作ってみる。
筆者の登壇内容はMicrosoft Map-SDK for Unityで簡単なアプリを作ってみるという内容で、ライブでUnity上でデモを行いました。
〇Microsoft Map-SDK for Untiyとは?
Microsoft Map-SDK for Untiy(以下Map-SDK)このブログでも何度か扱っているツールになりますが、一言で表すと『UnityプロジェクトでMapを扱えるツール』です。
Map-SDKを使用することでUnityでマップが使えますが、これはMixed Realityデバイスでの使用を前提に作成されているためMRTKを用いてHoloLens上で動かすことができます。
〇Map-SDKでできること
Map-SDKを用いれば大きく次のようなことが実現できます。
①Mapの読み込み、表示
Map-SDKによって地図データがストリーミングされます。(この性質からMap-SDKはオフライン環境下では動作しません。)
②Mapの座標に合わせてオブジェクトの配置
Unityの座標を用いるのではなくMap-SDKで読み込まれた地図の座標に合わせてピン止めやオブジェクトの表示が行えます。
③Mapのカスタマイズ
csvなどのデータを用意することでMapをカスタマイズし住所や建物名等、任意の表示を行うことができます。
④拡大,縮小,移動
MRTKのコンポーネントを用いることで簡単に地図の拡大、縮小、移動が行えます。
〇Map-SDKの導入
〇Map-SDKの取得
Map-SDKの導入には2種類の方法があります。
①Githubでサンプルプロジェクトを取得
Map-SDKは以下のGitHubリポジトリでサンプルプロジェクトを取得することができます。
②UnityのpackageManagerから取得
UnityのパッケージmanagerでNget経由で導入する方法です。
〇Bing Maps keyの取得
Map-SDKを用いるためにはBing Mapの開発者キーが必要です。
これは以下のBing Maps Dev Centerにサインインして取得することができます。
詳しい手順はその①の記事でまとめています。
〇アプリの構築
今回のイベントではライブコーディングをやってみたいとMRTKとMap-SDKを導入したUnityプロジェクトでMap-SDKの構築を説明しながらライブで行いました。
たった一行ですがコードも書きました。
今回の記事でも実際にイベントでやったように紹介したいと思います。
①Unity上部[MixedRealityToolkit]タブからMRTKのコンポーネントを追加する。
②空オブジェクトを作成し[Map]という名前を付けます。
③[Map]オブジェクトに[MapSession][MapRenderer]コンポーネントを追加します。
④[MapSession]コンポーネントの[Developer Key]にBing Mapsのキーのキーを入力します。
正しくキーが入力されるとMapのレンダリングが始まります。
[Map Renderer]コンポーネントの[Location]に緯度経度、ズームの設定がありここに任意の地球上の座標を入力することでその場所の地図を表示できます。
〇スクリプトで任意の座標を表示する。
エディタ上では任意の座標を表示できましたが、HoloLens上で任意のタイミングで座標を変えるためにはスクリプトを書く必要があります。
今回はごくごく簡単にUnityエディタでPlayするとStart関数で任意の座標が表示されるようなスクリプトをライブで書きました(たった一行ですが)
using System.Collections; using System.Collections.Generic; using UnityEngine; using Microsoft.Maps; using Microsoft.Maps.Unity; public class Demo : MonoBehaviour { [SerializeField] MapRenderer _render; [SerializeField] float Lat; [SerializeField] float Lot; // Start is called before the first frame update void Start() { } }
[MapRenderer]の情報を更新するのでネームスペースにMicrosoft.MapsとMicrosoft.Maps.Unityを追加します。
_renderはMapRendererでLatとLotが緯度経度になります。
MapRendererの情報を更新するためにはMapSceneメソッドを用います。 MapSceneメソッドにはいくつかタイプがありますが今回は座標と拡大率を指定できる[MapSceneOfLocationAndZoomLevel]メソッドを用います。
Start() { _render.SetMapScene(new MapSceneOfLocationAndZoomLevel(new LatLon(Lat,Lot),15f)); }
[MapSceneOfLocationAndZoomLevel]メソッドは(LatLon location,float zoomLevel)の引数を持ちそれぞれ緯度経度、と拡大率です。
LatLonを扱うためにはネームスペースに[using Microsoft.Geospatial;]の一文を追加する必要があります。
LatLonはLatitude LongitudeをまとめたものでLatLon(float Latitude ,float longitude)というように緯度経度のfloat型の引数を持ちます。
最終的なスクリプトは次のようになります。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Microsoft.Maps; using Microsoft.Maps.Unity; using Microsoft.Geospatial; public class Demo : MonoBehaviour { [SerializeField] MapRenderer _render; [SerializeField] float Lat; [SerializeField] float Lot; // Start is called before the first frame update void Start() { _render.SetMapScene(new MapSceneOfLocationAndZoomLevel(new LatLon(Lat,Lot),15f)); } }
これを適当なオブジェクトにアタッチしてUnityを実行すると次のようになります。 Lat,Lonには富士山の座標を入力しています。 (Lat=35.3625,Lon=138.730555555555556)
世界地図から富士山へズームしていきました。 Map-SDKを用いるとこのようなアニメーションも使用することができます。
以上が登壇内容でした。
〇感想
筆者にとって初めてのライブで構築するという機会で途中止まってしまうこともありましたが、コミュニティの皆さんがアドバイスを途中くれたこともあり、最後までデモを行えました。
今回のようなゆるっと会ならではの雰囲気でとても私自身にとっても良い時間になりました。
また、ZoomのコメントでMap-SDKが動いた瞬間など「すごい」や「こんどさわってみよう」という参加者の方のコメントを見てとてもやりがいのある発表になったと感じます。
イベントでライブでデモを行うことは限られた時間でデモを成功させ魅力を伝えることが重要と感じるので、知識と経験が必要と感じます。
その点でも今回非常に貴重な時間になりました。