質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

765閲覧

Mac上のUnityで位置情報を利用したスマホ用アプリのデバッグを行いたい

YA87

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/11/19 01:16

前提

Mac上でUnityを使用し、位置情報を使用したiphone用アプリを制作しています。
位置情報をコルーチンで定期的に取得し移動距離を算出しているのですが、意図しない挙動を起こします。
意図しない挙動とは、全く移動していないのにコルーチンが一回実行されるだけで移動距離に1000万メートル以上加算される、というものです。試しに仮の位置の座標を入力して計算を行った結果そこそこ正しい値が算出されたので、計算式は合っていると思われます。
Debug.Logを使用してMac上で不具合が起きている箇所を探したいのですが、私が位置情報の取得に使用しているInput.Location.lastdataではMacの位置情報を取得できないようです。
そのため、修正してはスマホに書き出してデバッグを繰り返しています。
コルーチン自体は正常に動作していることが分かっているので、恐らく位置情報関連で何か不具合が起きていると思うのですが、正直毎回スマホに書き出すのは骨が折れますし、時間も浪費してしまいます。
何かいい方法はないでしょうか。

実現したいこと

Mac上のUnityで位置情報を用いたデバッグを行いたい。
もしくは下のコードで不具合の原因と思われる箇所が見当たれば教えていただきたいです。

該当のソースコード

Distance.cs

1using System.Collections; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class Distance : MonoBehaviour 6{ 7 [SerializeField] private Text text, text2; 8 [SerializeField] private GameObject arrivalpanel; 9 10 //目標距離 11 public static int remainingDistance; 12 //移動した距離 13 public static int movingDistance; 14 //前回コルーチン実行時の緯度経度 15 private Location oldLocation; 16 17 void Start() 18 { 19 Input.location.Start(); 20 LocationInfo locationInfo = Input.location.lastData; 21 oldLocation = new Location(locationInfo.latitude, locationInfo.longitude); 22 movingDistance = 0; 23 _ = StartCoroutine(GetDistance()); 24 } 25 26 private IEnumerator GetDistance() 27 { 28 if (!Input.location.isEnabledByUser) 29 { 30 Debug.Log("GPS not enabled"); 31 yield break; 32 } 33 34 int maxWait = 20; 35 while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) 36 { 37 yield return new WaitForSeconds(1); 38 maxWait--; 39 } 40 41 if (maxWait <= 0) 42 { 43 Debug.Log("Timed out"); 44 yield break; 45 } 46 47 if (Input.location.status == LocationServiceStatus.Failed) 48 { 49 Debug.Log("Unable to determine device location"); 50 yield break; 51 } 52 53 while (true) 54 { 55 //端末の緯度経度 56 LocationInfo locationInfo = Input.location.lastData; 57 Location deviceLocation = new Location(locationInfo.latitude, locationInfo.longitude); 58 59 //距離(メートル) 60 int distance = (int)NaviMath.LatlngDistance(deviceLocation, oldLocation) * 1000; 61 62 remainingDistance -= distance; 63 64 movingDistance += distance; 65 66 //過去の位置の更新 67 oldLocation = deviceLocation; 68 //更新 69 text.text = string.Format("残り{0}m", remainingDistance); 70 71 Debug.Log(remainingDistance); 72 Debug.Log(movingDistance); 73 74 yield return new WaitForSeconds(3); 75 76 //目標距離を移動しきったらコルーチンを終了する 77 if (remainingDistance <= 0) 78 { 79 text2.text = string.Format(""); 80 arrivalpanel.SetActive(true); 81 break; 82 } 83 } 84 85 } 86} 87

DepaturePanel.cs

1using UnityEngine; 2using UnityEngine.SceneManagement; 3using UnityEngine.UI; 4 5public class DepaturePanel : MonoBehaviour 6{ 7 [SerializeField] private Button forestButton, mountainButton, southAmericaButton; 8 9 void Start() 10 { 11 forestButton.onClick.AddListener(Forest); 12 mountainButton.onClick.AddListener(Mountain); 13 southAmericaButton.onClick.AddListener(SouthAmerica); 14 } 15 16 //押したボタンで移動する距離の目標を変える 17 void Forest() 18 { 19 Distance.remainingDistance = 1000; 20 SceneManager.LoadScene("MovementScene"); 21 } 22 23 void Mountain() 24 { 25 Distance.remainingDistance = 3000; 26 SceneManager.LoadScene("MovementScene"); 27 } 28 29 void SouthAmerica() 30 { 31 Distance.remainingDistance = 10000; 32 SceneManager.LoadScene("MovementScene"); 33 } 34}

ArrivalPanel.cs

1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.SceneManagement; 4 5public class ArrivalPanel : MonoBehaviour 6{ 7 [SerializeField] private GameObject arrivalPanel; 8 [SerializeField] private Button button; 9 10 void Start() 11 { 12 arrivalPanel.SetActive(false); 13 button.onClick.AddListener(FindBeetles); 14 } 15 16 //移動距離によって読み込むシーンを変更する 17 void FindBeetles() 18 { 19 if (Distance.movingDistance <= 1500 && Distance.movingDistance >= 1000) 20 { 21 SceneManager.LoadScene("ForestSceen"); 22 } 23 else if(Distance.movingDistance <= 2500 && Distance.movingDistance >= 3000) 24 { 25 SceneManager.LoadScene("MountainSceen"); 26 } 27 else if(Distance.movingDistance <= 10500 && Distance.movingDistance >= 10000) 28 { 29 SceneManager.LoadScene("SouthAmericaSceen"); 30 } 31 32 } 33}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

お望みの回答とは少し違うかもしれませんが、私だったらこうするというのを書きますね。

私だったら、実機で位置情報を取得し記録するアプリを作成します。
ある程度の位置情報が溜まったら、なんらかの方法でMacに位置情報のリストを送り、そのデータをMac上で移動距離を計算するルーチンに与えて、なぜ不具合が起きるのか調べます。
移動距離を計算するルーチン以外の不具合だとうまくいかないかもしれませんが…。

(iPhoneからMacへデータを転送する方法は、いくつか方法があると思いますが、私だったら手を抜いて、アプリにテキストボックスを表示し、そこに書き出し、表示されたテキストをコピペしてiPhoneのメールアプリで自分のメアドに送ります。)

投稿2022/11/22 02:14

JunSuzukiJapan

総合スコア310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問