マンハッタンのビル群がにょきにょきっと.
すごいっ!
もういっちょ.
日本が誇る飛騨山脈がにょきにょきっと!
#はじめに
学生アルバイトのSSOOです.
この記事では, Unityで実際の地図からビルや山を生成する方法を説明します.
超簡単に作れます.
mapboxというサービス(基本的に無料)を使っていきます.
#アセットの導入
Unityにmapboxのアセットをいれていきます.
ここからmapboxのUnity向けのページにアクセスして, "Install the SDK"をクリックしてアカウントを作成しましょう.
次に, 自分のアカウントのページからUnity向けのSDKをダウンロードします.
すると下の画面になるので, 指示に従いながら"Install"から"Open an example"までやってみましょう.
マイクラ風の山が生成できたら, 記事冒頭のビルや山を作る準備は完了です.
#ビルや山をにょきにょきっと!
ビルや山を作っていきましょう.
ここでは, self-containedになるように説明します.
###ビルの生やし方
(山の生やし方だけ知りたい人は"山の生やし方"から読めば大丈夫です)
Unityで新しくプロジェクトを開き, mapboxのアセットを入れてください.
次にmapboxのアセットを開き, PrefabのMapをHierarchyにドラッグ&ドロップしてください.
HierarchyのMapにアタッチされているAbstractMapというスクリプトを, Inspectorから設定していきます.
AbstractMapは地面やビルを実際の地図からGameObjectとして生成するスクリプトです.
まず, 全体的な調整ができるGENERALから設定していきます.
表示させい場所の緯度経度をGENERALのLatitudeLongitudeに入力してください(例としてNewYork"40.706843, -74.011370"をここでは用います).
表示させる場所の拡大率を調整するZoomを17に設定してください.
地面の画像を設定するIMAGEを開きます. DataSourceをMapboxStreetsにしてください(地面の画像を地図に設定).
地形(地面の高さ)を決めるTERRAINを開きます.
ElevationLayerTypeをFlatTerrainにして, 地面を平にします.
最後に, MapLayersを開きます. ここでは, ビルなどのGameObjectを地面の上に生成して調整もできます.
DataSourceをMapboxStreetsにします. またFEATURESを開き, AddFeatureをクリックしてBuildingsを選択してください.
###山の生やし方
Unityで新しくプロジェクトを開き, mapboxのアセットを入れてください.
次にmapboxのアセットを開き, PrefabのMapをHierarchyにドラッグ&ドロップしてください(ビルを生やした人は必要なし).
HierarchyのMapにアタッチされているAbstractMapというスクリプトを, Inspectorから設定していきます.
AbstractMapは地面やビルを実際の地図からGameObjectとして生成するスクリプトです.
まず, 全体的な調整ができるGENERALから設定していきます.
表示させい場所の緯度経度をGENERALのLatitudeLongitudeに入力してください(例としてアメリカのフッド山"45.374218, -121.688341"をここでは用います).
表示させる場所の拡大率を調整するZoomを13に設定してください.
地面の画像を設定するIMAGEを開きます. DataSourceをMapboxSatelliteにしてください(地面の画像を衛星写真に設定).
地形(地面の高さ)を決めるTERRAINを開きます.
ElevationLayerTypeをTerrainWithElevationにして, 地面の高さを実際の標高と一致させます.
最後に, MapLayersを開きます. ここでは, ビルなどのGameObjectを地面の上に生成して調整もできます.
今回はビルを生やさないので, MapLayersのDataSourceはNoneにしてください.
再生すると......
ジャジャ~ン, "夢じゃなかった!"
※ここで紹介した方法は公式のチュートリアルを参考にしました. ただ, このチュートリアルはmapboxのバージョンが古いので注意が必要です.
###Tips
AbstractMapの補足説明をします. 公式レファレンスは少しわかりづらいので.
-
AbstractMapのInspectorで設定できる4つの機能
- GENERAL:地面やビルなどのGameObjectを生成する位置やタイミングの設定.
- IMAGE:地面の画像の設定.
- TERRAIN:地面の高さに関する設定.
- MAP LAYERS:ビルや山などの生成に関する設定.
-
Colliderの付け方
- 地面にColliderをつけたい場合は, TERRAINのAddColliderにチェック.
- ビルにColliderをつけたい場合は, MapLayersのFEATURES-Modeling-ColliderTypeで選択.
-
ビルの見た目を変える方法
- MapLayersのFEATURES-Texturing-StyleTypeで建物のTextureを変更できる.
-
プレイヤーの位置に応じて, 地面やビルを生成する方法
- GENERALのExtentOptionsをRangeAroundTransformに変更して, プレイヤーを指定する.
#mapboxを選んだ理由
他にもmapboxと同様に, 実際の地図からUnityで山やビルを生成するサービスがあります.
ここでは, なぜmapboxを利用しているかについて書きます.
mapbox以外のサービス
- GoogleMapsPlatform:きれいで使いやすいが, 無料版ではマンハッタンのみ利用可能. 完全版(有料)は個人で利用することができないので断念.
- WRD3D:アプリの利用者が1000人以下なら無料で利用できるが, 日本では東京の地図くらいしか使えないので断念.
- GoMap:デモ版がなく有料版しかない. 公式レファレンスはわかりやすいが, いきなり有料版は怖いので断念.
mapboxは月のアクティブユーザーが25,000人までなら無料(価格表)で日本中の地図も使える!
ということで, mapboxを利用しています.
コメント頂けると, 嬉しいです.