投稿日更新日

【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】MediaPipeUnityPluginを使って超簡単に指認識をM1 Macで試す

に投稿

【Unity】M1 Macで"The Progressive CPU lightmapper is not supported on Apple silicon, switching to the Progressive GPU lightmapper."と警告が出たときの対処法

に投稿

【DOTS】Unity Physicsで大量のオブジェクトの物理演算を試す

に投稿

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

に投稿

【DOTS】Unity Physicsの公式デモをさわってみる

© 2022 はるとんのブログ