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

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

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

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

MacOS(OSX)

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Q&A

受付中

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

YA87
YA87

総合スコア6

C#

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

MacOS(OSX)

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0グッド

0クリップ

208閲覧

投稿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}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

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

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

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

投稿2022/11/22 02:14

JunSuzukiJapan

総合スコア290

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

MacOS(OSX)

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。