【Unity】mapbox for Unity – 現在地点にマーカーを表示する
OverView
前回 hhttps://www.kemomimi.dev/2019/05/04/unity-mapbox-intro/ にてUnity上でmapboxを使いマップを表示する手順を書きました.
今回はそのマップに現在地点を表示する方法を書きます.
Environment
- MacOS Mojave 10.14.4
- Unity 2014.2.14f1
- mapbox-unity-sdk v2.0.0
Method
mapboxの導入と表示
前回 https://www.kemomimi.dev/2019/05/06/unity-mapbox-show-marker/ のポストを見てください(๑•̀ㅂ•́)و✧
前回の記事を見終わった時点で以下の用になっていると思います.

現在地点にマーカーを表示する
現在画面の中心がAbstract Mapコンポーネントで設定した緯度経度の地点になっているかと思います.
つまりは,その中心点に3DのGameObjectまたは,2DのSpriteでも表示すれば良いということです.
Abstract Mapコンポーネントはありがたいことにしっかりと指定緯度経度をアタッチされているオブジェクトの中心座標に合わせてくれているんですね٩(๑òωó๑)۶
今回Abstract MapコンポーネントがアタッチされていたEmptyObjectのtransform.positionは(0, 0, 0)でしたのでAbstract Mapの緯度経度に設定した地点は(0, 0, 0)になります.
では説明はこの辺にしてヒエラルキーでオブジェクトを作成し,大きさや色を適宜変更しましょう.
今回自分は以下の様に設定しました.
- Create 3D Object, Cube
- Transform.position は (0, 0, 0)
- Transform.Scale は (5, 5, 5)
- Materialを新規に作成し,Unlit/Color 赤色に

実行

実行してみましょう.Abstract Mapの拡大率(zoom)を適宜変えるとわかりやすいです.
Ex.現在向いている方角とマーカー,マップの向きをリンクさせる
まずスクリプトを作成します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System.Collections; using UnityEngine; public class CompassLink : MonoBehaviour{ [SerializeField] private GameObject _rotationTarget; //コンパスと動機して回転させるもの [SerializeField, Space(15f)] private float _intervalSeconds = 3.0f; //同期する周期 [SerializeField] private LocationServiceStatus _status; private void Start(){ StartCoroutine(InputGPSInfomation()); //起動と同時に動作開始 } private IEnumerator InputGPSInfomation(){ while (true){ switch (_status) { case LocationServiceStatus.Stopped: Input.compass.enabled = true; //コンパスを有効化する Input.location.Start(); break; case LocationServiceStatus.Running: var compassData = Input.compass.trueHeading; _rotationTarget.transform.rotation = Quaternion.Euler(new Vector3(0, 0, -compassData)); //向きを反映 break; default: break; } yield return new WaitForSeconds(_intervalSeconds); } } } |
スクリプトが作成完了したら,適当なゲームオブジェクトにアタッチします.
インスペクターから_rotationTargetにマーカまたはAbstract MapをアタッチしてあるGameObjectを代入することで,コンパスの向きと同期します.