投稿日更新日

【Unity】Mapbox SDKでマップ上の任意の緯度経度の座標にオブジェクトを配置する

はじめに

前回の記事でUnityにマップを召喚しました。

今回はその続きで、マップ上の任意の緯度経度の座標にオブジェクトを配置してみたいと思います。 マップを配置したところからスタートするのでお済みでない方は、先にそこまで進めてみてください。

検証環境

  • 機種: MacBook Air(m1)
  • OS: MacOS Monterey(12.3.1)
  • メモリ: 8GB
  • Unity: 2021.2.16f1(SILICON)
  • mapbox-unity-sdk: v2.1.1

プロジェクトの準備

前回のプロジェクトを使いますので、Unityで開いてください。

緯度経度をワールド座標に変換する

スクリプト

まず、スクリプトを追加しましょう。名前はMapboxLocationとします。 緯度経度は、長崎市役所の座標にしています。

using System.Collections; using System.Collections.Generic; using UnityEngine; using Mapbox.Unity.Utilities; using Mapbox.Unity.Map; using Mapbox.Utils; public class MapboxLocation : MonoBehaviour { public AbstractMap map = null; void Start() { map.MapVisualizer.OnMapVisualizerStateChanged += (state) => { if (state == ModuleState.Finished) { double lat = 32.7503353; // 緯度 double lng = 129.8777355; // 経度 Vector2d latlng = new Vector2d(lat, lng); Vector3 pos = map.GeoToWorldPosition(latlng); Debug.Log(pos); } }; } void Update() { } }

スクリプトをアタッチ

スクリプトを適当なオブジェクトにアタッチして、マップのコンポーネントを入れます。

マップボックスの緯度経度の設定

結果

実行すると画像のようにワールド座標を取得できました。

mapbox-location-debug

オブジェクトを配置する

Cubeを配置する

検証用のオブジェクトを配置します。Sphereでも何でもいいですが、ここではCubeにします。

キューブ(マップボックスローケーション)

スクリプトの改造

単純にCubeのPositionにワールド座標を代入するだけです。 コンパイルが済んだら、Cubeをスクリプトコンポーネントにアタッチしてください。

using System.Collections; using System.Collections.Generic; using UnityEngine; using Mapbox.Unity.Utilities; using Mapbox.Unity.Map; using Mapbox.Utils; public class MapboxLocation : MonoBehaviour { public AbstractMap map = null; public GameObject cube = null; void Start() { map.MapVisualizer.OnMapVisualizerStateChanged += (state) => { if (state == ModuleState.Finished) { double lat = 32.7503353; // 緯度 double lng = 129.8777355; // 経度 Vector2d latlng = new Vector2d(lat, lng); Vector3 pos = map.GeoToWorldPosition(latlng); Debug.Log(pos); cube.transform.position = pos; } }; } void Update() { } }

結果

y座標をいじってないので埋もれていますが、指定した緯度経度にCubeが配置されていることがわかります。

結果(キューブ)

おわりに

Mapbox Unity SDKを使って、マップ上の指定した緯度経度にオブジェクトを配置してみました。 今回はCube1個だけでしたが、複数のオブジェクトに適用することも可能ですので、試してみて欲しいです。

それでは素敵なUnityライフをお過ごしください。

関連記事

に投稿

【Unity】Mapbox Maps SDK for Unityで3D地形マップを召喚する

© 2022 はるとんのブログ