Maps SDK for Unity を試してみた
Tags: unity3d, googlemaps, mapssdk
Published: 2020-06-19 05:37:51

---
title: Maps SDK for Unity を試してみた
published: true
description: 
tags: Unity, GoogleMaps, MapsSDK
//cover_image: https://dev-to-uploads.s3.amazonaws.com/i/cdvqoxouptye6qwl69mq.png
---

Hi, I'm [@ikkou](https://twitter.com/ikkou).

これはもう何番煎じかわからない「Maps SDK for Unity を試してみる」です。

## Maps SDK for Unity とは

Maps SDK for Unity は Google マップの地形データを使った iOS/Android 向けのアプリケーションを開発できる Unity 向けの SDK です。

> The Maps SDK for Unity is a set of development tools, services, and ready-made assets, that extend the Unity game development environment with features that allow you to create real-world mobile games—easily!

Reference: https://developers.google.com/maps/documentation/gaming/overview_musk

Google マップを使ったアプリケーションを開発する際にお世話になる Google Maps Platform の 1 カテゴリにあたります。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/8l4w98qsxby7ociuarpu.png)

Reference: https://cloud.google.com/maps-platform/gaming

これまでは特定のゲーム開発企業向けにクローズドで展開されていましたが、2020/06/16 から一般公開されました。

簡単に言うと俺俺 Pokémon GO を作れるようになります。

後述しますが、小さな範囲でテストするだけなら無償、一定以上の DAU を集める場合は有償となります。

## Maps SDK for Unity のはじめかた

わかりやすいチュートリアルが用意されているので、順を追って進めていきましょう。

* [Hands-on Quickstart](https://developers.google.com/maps/documentation/gaming/quick_start)
* [Maps SDK for Unity Example Scenes](https://developers.google.com/maps/documentation/gaming/example_scenes)

### 下準備 GCP 編

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/0yreqbm5ygy1x10unxpo.png)

Maps SDK for Unity を動かすには `Semantic Tile API` と `Playable Locations API` を有効化する必要があります。既に有効化済みの人は読み飛ばしてください。

> To use Google Maps Platform gaming services, you must download the Maps SDK for Unity. The Semantic Tile API and the Playable Locations API will be enabled for you by default.

https://developers.google.com/maps/documentation/gaming/get_started_gaming

同 API が有効化されていない、あるいは GCP のアカウントを持っていない人は任意のプロジェクトを作成して有効化してください。無償枠の中で収めるつもりの人もクレジットカードの登録が必要です。大丈夫です。この時点では課金されません。

* 任意の Google アカウントでログインした状態で https://console.cloud.google.com/ にアクセスして有効化
* 任意のプロジェクトを作成
* `＋ APIとサービスを有効化` をクリック
* API を有効化する
    * `Semantic Tile API` を検索して `有効にする` をクリック
    * `Playable Locations API` を検索して `有効にする` をクリック
* 認証情報を作成する
    * `APIとサービス > 認証情報` で `＋ 認証情報を作成` をクリックして `APIキー` を選択する
    * 作成された `自分のAPIキー` を控える
* そのまま `キーを制限` をクリックする
* `API キーの制限と名前変更` で名前をわかりやすいものに変更する ( 任意 )
* `API の制限` で `キーを制限` をクリックして `Semantic Tile API` と `Playable Locations API` を選択して保存する

GCP の下準備は以上です。

ちなみに API キーが漏れると、悪用されるなどして高額な請求が届くことがあります。間違ってもスクショを Tweet したり GitHub にそのままあげるなどという暴挙に出ないでください。

### 下準備 Unity 編

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dnko8uxwc2ifs8x4pxha.png)

* Unity 2018.4 以降を用意する。
    * 今回は `2019.2.21f1` で進めます。
* Unity 2018 系には [ここから](http://www.gstatic.com/mapsunitysdk/maps_sdk_for_unity_2018.zip)、Unity 2019 系には [ここから](http://www.gstatic.com/mapsunitysdk/maps_sdk_for_unity_2019.zip) それぞれ SDK をダウンロードして解凍する
    * なぜか日本語のリファレンスページからこのリンクが記載されているページに着地できないので、英語が不慣れな人は英語ページを日本語翻訳した方が良い
* Assets → Import Package →　Custom Package からダウンロードした `GoogleMaps.unitypackage` をインポートする

## サンプルシーンを試してみる

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/sv1ehm62o8vo8iacjb80.png)

下準備ができたら早速サンプルシーンを開いてください。

* Assets > GoogleMaps > Examples > 01_GettingStarted > HelloWorld を開く
* Basic Examples Script の Inspector にある `Maps Services (Script)` の `Api Key` に GCP の API キーを入れる
* 初期状態で Play をクリックすると「自由の女神像」が表示される
* WASD キーで前後左右に、Q キーで垂直下降、E キーで垂直上昇する

### 用意されているサンプルシーン

MapsSDK for Unity には以下のサンプルシーンが用意されています。
具体的にどんなことができるのか、イメージを膨らませやすいです。

* 01_GettingStarted > HelloWorld
* 02_Fundamentals > MapService101
* 03_MapsStyling > StylingMaps101
* 04_Advanced >
    * EditTimePreview
    * Fencing (好き)
    * Miscellaneous >
        * AddingComponent
        * DayAndNight (好き)
        * LocationFollower
        * Minimap (好き)
        * PrivateRoads
    * MixedZoom
    * MoreStyling >
        * BuildingBorders
        * BuildingSquashing (好き)
        * NineSlicing
        * Parapets
        * PrefabReplacement

すべてのサンプルシーンが説明されているわけではありませんが、各シーンの概要は [Maps SDK for Unity Example Scenes](https://developers.google.com/maps/documentation/gaming/example_scenes) を参照してください。

試すときは Scene ごとに API キーを設定してください。

### 浅草に行ってみる

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6mry2r669bfig1jxba9f.png)

各シーンにアタッチされているコンポーネントの `Lat lng` に任意の緯度と経度を指定して再生すれば、好きな場所を表示できます。

緯度と経度は、例えば [Geocoding.jp](https://www.geocoding.jp/) で検索する方法や、Google マップで検索する方法があります。

> 緯度経度をコピペするにはGoogleMapで右クリック、「この場所について」
> したに緯度経度出るけどコピペできない。クリック
> 左側に出るよ！

Reference: [Google Maps SDK for Unity使ってみた！ - トマシープが学ぶ - おまけ：緯度経度をコピペする](https://bibinbaleo.hatenablog.com/entry/2020/06/17/231314#%E3%81%8A%E3%81%BE%E3%81%91%E7%B7%AF%E5%BA%A6%E7%B5%8C%E5%BA%A6%E3%82%92%E3%82%B3%E3%83%94%E3%83%9A%E3%81%99%E3%82%8B)

今回、n 番煎じということもあり、東京タワーあたりは普通すぎるので、例えば観光名所として有名な浅草の雷門を指定しました。`Lat lng` は `35.711256, 139.796772` です。

実行すると、雷門、そして浅草寺に抜ける仲見世通りが再現されていることが分かります。

## Android 実機で動かしてみる

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4aghgcgj90fdr74job6t.PNG)

Build Setting に Scene を追加するなど、Unity から Android 実機にデプロイするお作法に則って、`Build And Run` することで、繋いだ Android 実機で該当シーンを動かせるようになります。

今回は Pixel 3a にデプロイしてみました。

スマートフォンには移動に使う `WASD` キーと上昇下降に使う `QE` キーがありませんが、`WASD` キーの代わりに前後左右の動きと回転を担うコントローラーが、`QE` キーの代わりに上昇下降を担うコントローラーが用意されています。

Examples として用意しているものは `Lat lng` に緯度と経度を直接打ち込んでいるので、それこそ Pokémon GO のように「現在地」の地形データは表示できません。

## お値段について

Maps SDK for Unity を使えば Google マップを使った位置情報連動型のアプリが作れることはわかりました。でもお高いんでしょ?

結論から言うと、始めるだけ「無償」です。個人用途/商用関係なく、一定以上の DAU を集めるなら「有償」です。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ul565vsuxsfzroteza3v.png)

Reference: https://developers.google.com/maps/documentation/gaming/usage_billing

要点は以下の通りです。

* 従量課金制
* 毎月 $200 分のクレジットが付与されるので、その範囲に収まる限りは無償、超えた分が有償
    * 無償クレジットは翌月以降に繰り越されない
* 課金形態はゲーム業界には馴染み深い DAU ( Daily Active User: 1ユーザーが1日に何回アクセスしてもDAU は 1 とカウントされる ) 基準
    * ただし 1 ユーザーが異なる 2 デバイスからアクセスした場合の DAU は 2 とカウントされる
    * ユーザー A がアプリのキャッシュを削除するとユーザー B として扱われ DAU は 2 とカウントされる
        *  つまりリセマラ分がカウントされる ( と認識しています )
    * DAU は PST ( 太平洋時間 ) の 0 時が基準となる
* 上記の条件より一般的な DAU とは異なる数字になる可能性がある
* 請求額は月間 DAU で決まる
    * ユーザー A が 1 ヶ月間 30 日毎日アクセスした場合の月間 DAU は 30
    * 月間 1,500,000 DAU までは 1,000 DAU あたり $10
    * 月間 1,500,000 ~ 7,500,000 DAU はボリュームディスカウントで 1,000 DAU あたり $8
    * 月間 7,500,000 DAU 以降は要問い合わせ

具体的な例は前述のページの [Usage and billing examples](https://developers.google.com/maps/documentation/gaming/usage_billing#billing-examples) に記されています。

1. 月間の平均 DAU が 500 以下の場合は無償枠に収まる
    * 無償枠に収まる月間 DAU は 20,000
        * 月間の平均 DAU が 640 以下 ( 640*31=19840 ) が無償枠に収まる閾値 
    * 今回のような「試してみた」程度や、小さなサービスであれば必要十分
        * 何らかのきっかけでバズると超える可能性がある
    * 計算式は DAU 500 * 30 日間 = 15,000 月間 DAU
1. 月間の平均 DAU が 1,000 の場合は有償枠になる
    * 計算式は DAU 1,000 * 30 日間 = 30,000 月間 DAU
    * 1,000 DAU あたり $10 なので請求額は $300
    * 毎月 $200 分の無償クレジットを超えた $100 が実際の請求額になる
1. 月間の平均 DAU が 75,000 の場合はボリュームディスカウントが発生した有償枠になる
    * 計算式は DAU 75,000 * 30 日間 =  2,250,000 月間 DAU
    * 月間 1,500,000 DAU までが 1,000 DAU あたり $10 で $15,000
    * 月間 1,500,000 DAU 以降は 1,000 DAU あたり $8 で $6,000
        * 計算式は 2,250,000 - 1,500,000 = 750,000/1000 * $8
    * 毎月 $200 分の無償クレジットを超えた $20,800 が実際の請求額になる
        * 計算式は $15,000 + $6,000 - $200

使用量は GCP の管理画面から確認できます。

## まとめ

Maps SDK for Unity の概要、使い方、料金体系を紹介しました。

「試してみる」まではこの記事で実現できますが、例えば「俺俺 Pokémon GO を作る」は実現できません。用意されている Examples とドキュメントを参考にして適宜調べてください。

---

## おまけ

原理を考えれば当たり前っぽいけれど Maps SDK for Unity を Cluster Creator Kit でそのまま使うのは無理でした。

> Maps SDK for Unity と Cluster Creator Kit を組み合わせて動かせた
> そしてこのままワールドアップロードしても生成された世界は反映されませんでした

https://twitter.com/ikkou/status/1273589839779094528

---

現場からは以上です。
良き Maps SDK for Unity ライフを！