Help us understand the problem. What is going on with this article?

Unityで3D地図をつくろっ! ビルも山もにょきにょきっ.

スクリーンショット 2019-09-05 20.36.51.png
マンハッタンのビル群がにょきにょきっと.
すごいっ!:laughing:
もういっちょ.
スクリーンショット 2019-09-05 20.26.14.png
日本が誇る飛騨山脈がにょきにょきっと!

はじめに

学生アルバイトのSSOOです.

この記事では, Unityで実際の地図からビルや山を生成する方法を説明します.
超簡単に作れます.

mapboxというサービス(基本的に無料)を使っていきます.

アセットの導入

Unityにmapboxのアセットをいれていきます.
ここからmapboxのUnity向けのページにアクセスして, "Install the SDK"をクリックしてアカウントを作成しましょう:point_down:.
スクリーンショット 2019-09-04 19.26.49 (1).png


次に, 自分のアカウントのページからUnity向けのSDKをダウンロードします:point_down:.
スクリーンショット 2019-09-04 19.32.51 (1).png


すると下の画面になるので, 指示に従いながら"Install"から"Open an example"までやってみましょう.スクリーンショット 2019-10-01 19.26.29.png


マイクラ風の山が生成できたら:point_down:, 記事冒頭のビルや山を作る準備は完了です:wink:.
スクリーンショット 2019-09-04 20.05.29.png

ビルや山をにょきにょきっと!

ビルや山を作っていきましょう.
ここでは, self-containedになるように説明します.

ビルの生やし方

(山の生やし方だけ知りたい人は"山の生やし方"から読めば大丈夫です)
Unityで新しくプロジェクトを開き, mapboxのアセットを入れてください.
次にmapboxのアセットを開き, PrefabのMapをHierarchyにドラッグ&ドロップしてください:point_down:.
スクリーンショット 2019-09-06 16.54.50.png


HierarchyのMapにアタッチされているAbstractMapというスクリプトを, Inspectorから設定していきます.
AbstractMapは地面やビルを実際の地図からGameObjectとして生成するスクリプトです.

まず, 全体的な調整ができるGENERALから設定していきます.
表示させい場所の緯度経度をGENERALのLatitudeLongitudeに入力してください(例としてNewYork"40.706843, -74.011370"をここでは用います).
表示させる場所の拡大率を調整するZoomを17に設定してください.
スクリーンショット 2019-09-09 19.38.36.png


地面の画像を設定するIMAGEを開きます. DataSourceをMapboxStreetsにしてください(地面の画像を地図に設定).
スクリーンショット 2019-09-09 19.43.20.png


地形(地面の高さ)を決めるTERRAINを開きます.
ElevationLayerTypeをFlatTerrainにして, 地面を平にします.スクリーンショット 2019-09-09 19.50.49.png


最後に, MapLayersを開きます. ここでは, ビルなどのGameObjectを地面の上に生成して調整もできます.
DataSourceをMapboxStreetsにします. またFEATURESを開き, AddFeatureをクリックしてBuildingsを選択してください.
スクリーンショット 2019-09-09 19.56.37.png


再生すると......
スクリーンショット 2019-09-09 19.58.57.png
ジャジャ~ン:grin:, "夢だけど!"

山の生やし方

Unityで新しくプロジェクトを開き, mapboxのアセットを入れてください.
次にmapboxのアセットを開き, PrefabのMapをHierarchyにドラッグ&ドロップしてください:point_down:(ビルを生やした人は必要なし).
スクリーンショット 2019-09-06 16.54.50.png


HierarchyのMapにアタッチされているAbstractMapというスクリプトを, Inspectorから設定していきます.
AbstractMapは地面やビルを実際の地図からGameObjectとして生成するスクリプトです.

まず, 全体的な調整ができるGENERALから設定していきます.
表示させい場所の緯度経度をGENERALのLatitudeLongitudeに入力してください(例としてアメリカのフッド山"45.374218, -121.688341"をここでは用います).
表示させる場所の拡大率を調整するZoomを13に設定してください.
スクリーンショット 2019-09-09 20.07.58.png


地面の画像を設定するIMAGEを開きます. DataSourceをMapboxSatelliteにしてください(地面の画像を衛星写真に設定).
スクリーンショット 2019-09-09 20.09.34.png


地形(地面の高さ)を決めるTERRAINを開きます.
ElevationLayerTypeをTerrainWithElevationにして, 地面の高さを実際の標高と一致させます.
スクリーンショット 2019-09-09 20.10.57.png


最後に, MapLayersを開きます. ここでは, ビルなどのGameObjectを地面の上に生成して調整もできます.
今回はビルを生やさないので, MapLayersのDataSourceはNoneにしてください.
スクリーンショット 2019-09-09 20.13.14.png


再生すると......スクリーンショット 2019-09-09 20.15.08.png
ジャジャ~ン:wink:, "夢じゃなかった!"

※ここで紹介した方法は公式のチュートリアルを参考にしました. ただ, このチュートリアルは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を利用しています.

コメント頂けると, 嬉しいです.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした