[Unity] WRLD Unity SDKで地図情報に基づいた建物を表示する

# はじめに

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">世界中と日本とそれぞれで人気のアセットTOP10 – 2017年9月版を公開しました。<br><br>・お気に入りリストに追加された<br>・無料でダウンロードしていただいた<br>・有料でご購入いただいた<br>それぞれTOP10です。<br><br> <a href="https://t.co/Ay93Wcg9ed">https://t.co/Ay93Wcg9ed</a> <a href="https://t.co/oANt4BIL1a">pic.twitter.com/oANt4BIL1a</a></p>&mdash; UnityAssetStoreJapan (@AssetStore_JP) <a href="https://twitter.com/AssetStore_JP/status/915903831766065153?ref_src=twsrc%5Etfw">2017年10月5日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

UnityAssetStoreJapanさんのツイートの中で興味深いアセットを見つけたので紹介します。
リリースは2017/05/31なので少し遅い感じではありますが...

# WRLD Unity SDK
![image.png](https://qiita-image-store.s3.amazonaws.com/0/102664/ccd3d2ce-2ac3-3e22-dd92-b1bfad82537c.png)

WRLD Unity SDKは地形生成系のアセットです。
地図データをAPIで取得し、Unity上でMeshを生成します。
下記の公式サイト/動画を見るとよりビジョンが湧くと思います。

https://www.wrld3d.com/
https://www.youtube.com/watch?v=wOXnj0u8njM

## 値段
https://www.wrld3d.com/developer-license-fees/

Assetはフリーとなっていますが、実際はアプリのMAU(Monthly Active User/月にどのくらいのユーザがアプリを使用したか)に応じてライセンス契約する必要があります。月に1,000人以下であれば無料で使用できるので、VR/ARなどの簡単なデモや研究、モックアップであれば特に気にせず使用することができるでしょう。

<img width="943" alt="スクリーンショット 2017-10-10 3.45.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/0ae799c1-df26-d12f-aea4-8f8ca078401d.png">

## 類似アセット
### GoMap
![image.png](https://qiita-image-store.s3.amazonaws.com/0/102664/a47a7fd7-a971-c1f5-07fc-1913d706260f.png)

https://www.assetstore.unity3d.com/jp/#!/content/68889

MapzenやOpenStreetMapのAPIから地形情報を取得し、Meshを生成することが出来ます。
またGooglePlacesAPIを使って、コンビニなどのPOIに任意のオブジェクトを配置させることが出来ます。

### MapBox for unity
![image.png](https://qiita-image-store.s3.amazonaws.com/0/102664/339b00fc-bc02-f302-f370-38f36355d781.png)

https://www.mapbox.com/unity/
https://github.com/mapbox/mapbox-unity-sdk

mapboxは主にWeb向けのカスタムマップの作成/提供を行なっていましたが、Unity向けに2016年の終わり頃からアセットの提供を開始しました。MapBoxStudio(Web上のエディタを使いスタイルを生成することができる君)が使用できたり、マインクラフト風のDEMOがサンプルシーンに含まれていたり、表現力は非常に高いです。MAU5万人までは無料で使用することができます。

## WRLDの導入
### WRLDをインポート
Unityエディタ上のAssetStoreから "WRLD" と検索し、アセットをインポートする

### API Keyを取得する
WRLDを使用するにはユーザ登録し、API Keyを取得する必要がある。
インポート中に以下のようなウィンドウが表示されるので "Get Key" を選択。

<img width="420" alt="スクリーンショット 2017-10-10 3.40.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/bac74400-30b9-054c-e263-6e8ba9e01245.png">

以下に必要な情報を記載して登録。

<img width="1440" alt="スクリーンショット 2017-10-10 3.40.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/586e2316-a3c8-9a3c-4eb3-daa33bb34ec1.png">

その後、メールが届くのでConfirmすることで登録完了。
ログイン後、Developersに遷移し、以下の赤枠のところにkey名(例:アプリ名)を入れつつ登録。
生成されたAPI Keyはこの後、地図の描画に使用するので、コピーしておく。

<img width="1440" alt="create_api_key.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/ddffe1e8-eee0-253e-24f5-8f3d4be8458d.png">

### Shadow Distanceの設定
Unity側に戻るとShadow Distance(カメラとどのくらい離れた位置にあるオブジェクトまで影を表示するか)を最適化するか、と聞かれるので `Increase` する。
以下のスクリーンショットに記載してあるとおり、 `Edit > Project Settings > Quallity` から変更したり、元に戻したりすることが可能。

<img width="419" alt="スクリーンショット 2017-10-10 3.42.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/e2375165-a30d-f65c-a635-888bdad2c311.png">


### Unity側でDEMOシーンを開く
Projectから `Wrld > Demo > Examples` を開く

<img width="235" alt="example.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/936925ba-3e07-fb59-1a68-8901eea81666.png">

### 取得したAPI Keyを設定する
DEMOは複数あるが1つのシーンで管理されている。
全てのシーンで共通して使用する `ExamplesCommon` と各デモ用のGameObject群が非アクティブで置かれているのがHierarchyを見ると分かる。
このまま Play しても地図は表示されず、API Keyを設定して！とWarningが表示される。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/102664/5eb4fe56-8a8f-903b-c400-5fdc0a6d0fa9.png)

Playをやめ、適当な非アクティブになっているGameObject、例えば `MovingTheCamera` を選択し、そこにアタッチされている `Wrld Map` コンポーネントにAPI Keyを入力する。

<img width="520" alt="api key.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/ce7b952f-ef22-e71c-71b0-d145d4e3002b.png">

入力後、Inspectorの表示が変わり、各種設定が可能になる。
API Keyは全ての `Weld Map` に適応されるため、他のGameObjectに設定して回る必要がない。
Demoではすでに入力済みだが、以下の項目を設定する必要がある。

- Camera
- ThemeSettings/Material Directory
  - Resource以下に配置し、Resourceからのパスを入力する必要がある

<img width="515" alt="api_key.png" src="https://qiita-image-store.s3.amazonaws.com/0/102664/9266364b-fa51-c4a3-fe87-be51523909c9.png">

### Unityの実行
この状態でUnityでPlayし、プルダウンから任意のDEMOを選択する。
APIが実行され、Meshが生成される。

![wrld_map.gif](https://qiita-image-store.s3.amazonaws.com/0/102664/97774b03-c06c-a345-6fd4-223507043a47.gif)

## 注意事項
### 日本の描画
2017/10/10現在、日本周りの描画はサポートされていないようです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://t.co/sEhj48bMfd">https://t.co/sEhj48bMfd</a> <br>WRLDすごいなぁって試してるけど日本の地形ってまだ非対応なのかな、本文中には “Our maps provide full coverage for the United States, ... Japan” ってあるけど <a href="https://t.co/yEcknc75W8">pic.twitter.com/yEcknc75W8</a></p>&mdash; 青木とと(ˊᗜˋ*)@デジゲー博C08b (@lycoris102) <a href="https://twitter.com/lycoris102/status/917471142025166848?ref_src=twsrc%5Etfw">2017年10月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">MapDesigner経由でも “No imagery at this location and altitude” って表示されるし、Unity側で渋谷の緯度経度入れても海しか描画されない <a href="https://t.co/AJ0j9Bcp1T">pic.twitter.com/AJ0j9Bcp1T</a></p>&mdash; 青木とと(ˊᗜˋ*)@デジゲー博C08b (@lycoris102) <a href="https://twitter.com/lycoris102/status/917472075597602816?ref_src=twsrc%5Etfw">2017年10月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>