たつぷりの調査報告書

博士後期課程(理学)の学生が趣味でUnityやBlenderで遊ぶブログです。素人が独学で勉強した際の忘備録です。

UnityでGoogleMapを使ってみる

ポケモンGOのような実際の地図情報を使ったゲームをUnityで開発するにはGoogle Maps Platformゲームサービスを用いれば良い。この記事では特に、Maps SDK for Unityを導入し、座標の情報からUnityのシーンにGoogle Mapから提供される構造物の情報をゲームオブジェクトとして表示するまでの流れをまとめる。

Google Maps Platformゲームサービス

公式ドキュメントを引用すると、

Google Maps Platform ゲームサービスは、世界のさまざまなシーンを舞台にしたゲームを作成するための開発プラットフォーム

である。

developers.google.com

Google Maps Platfprm は以下の二つで構成される。

  • Maps SDK for Unity:GoogleMapが提供する構造物や地理の情報をUnityゲームオブジェクトに変換する
  • Playable Locations API:ゲームオブジェクトの配置など、ゲームで使用するロケーション候補の提供

今回はMaps SDK for Unityにフォーカスする。対応するUnityバージョンは2018.4以上であり、この記事では2019.4を用いてテストしている。

APIの導入方法

Google Maps Platformを利用するにはGoogle Cloudに加入する必要がある。Google Cloudは90日間無料。その期間中は300ドルのクレジットをお試しとして使える。90日過ぎるか、クレジットを使い切るとトライアル期間は終了で、有料アカウントにアップグレードする必要がある。有料アカウントでは使用した分の料金を月々払う必要があるが、GoogleMapPlatformに関しては月200ドルまでは無料で使うことができるらしい。Maps SDK for Unityで使うのはSchematicTileAPIであるが、これは1アクセス0.01ドルなので20000アクセスまでは無料で使えるということになるだろう(2020年12月)。

Google Cloud

Google  Cloud(https://cloud.google.com/)にログインする。左のURLに行くと、以下の図のような画面になるが、ここから「コンソール」を選択すると個人のページに遷移する。初めてGoogle Cloudを使う場合は、手順に従って住所とクレジットカード情報などを入力すればよい。

f:id:Tatsupuri:20201213194621p:plain

デフォルトではMyFirstProjectというプロジェクトが設定されている。APIを追加したいプロジェクトを選択したり、新規で作成する。

f:id:Tatsupuri:20201213194626p:plain

次にAPIの設定をする。それにはGoogle Cloud Platformの左のメニューからでAPIとサービスを選択する。

認証情報の作成

まず初めにAPIをキーを作成する。公開データに対しての匿名アクセスはAPIキーがあればできる。左上の三本線からナビゲーションバーを開き、そこからAPIとサービスを選択する。認証情報を選択し一番上の認証情報を作成を選択、必要に応じてオプションを選び作成するとAPIキーが発行される。

f:id:Tatsupuri:20201213194648p:plain

APIの追加

プロジェクトで使用しているAPIの一覧はAPIとサービスの画面から確認することができる。APIを追加するときは、APIとサービスの画面からAPIとサービスの有効化を選択する。 f:id:Tatsupuri:20201213194653p:plain

APIの一覧から使用したいAPIを選択して、有効化する。特にMaps SDKを使うためにはSemantic Tile APIを有効化する必要がある。 f:id:Tatsupuri:20201213194636p:plain

f:id:Tatsupuri:20201213194640p:plain

APIの使用料に関しては各APIで設定されており、各APIのページから確認することができる。例えば、Semantic Tile APIの場合は以下のようになっている。

f:id:Tatsupuri:20201213194644p:plain

UnityにMaps SDKを導入する

UnityのプロジェクトにMaps SDKを導入する。

http://www.gstatic.com/mapsunitysdk/maps_sdk_for_unity_2019.zip

からバージョン2019向けのMaps SDKをダウンロードする。この中にUnityPackageが入っているのでカスタムアセットのImportからこれをプロジェクトに導入する。

地形や構造物のオブジェクトは、それをMaps Serviceコンポーネントを持つゲームオブジェクトの子に作成されていく。そこでまず空Objectを作成して(ここではMapBaseと名付ける)、コンポーネントにMapsServiceを追加する。このコンポーネントAPI Key Fieldに先ほど作成したAPIキーを入力する。

MapsService基本事項は以下を参考にした。

developers.google.com

自由の女神を表示する

動作確認のために自由の女神をシーンに表示する。MapBaseオブジェクトにGoogleが用意したBasicExampleコンポーネントを追加する。このコンポーネントのLatingフィールドに座標の情報を入れるとその場所を中心にしてMapが表示される。この例では自由の女神が表示される。

このフィールドには 緯度、経度 の順に数字を入力。北緯、東経が正の値をとる。

f:id:Tatsupuri:20201213194657p:plain

[補足] GoogleMapから座標を取得する方法

GoogleマップのURLは地図の中心の座標とズームレベルの情報をからなっている。実際にURLは以下のような構成になっている。

google.com/maps/@xx.xxxxxxx,yy.yyyyyyy,zz

xx.xxxxxxx は緯度、yy.yyyyyyy は経度、zz はズームレベルを表す。このようにしてGoogle Mapで表示されている地図の座標の情報などを得ることができる。

f:id:Tatsupuri:20201213194705p:plain