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

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

新規登録して質問してみよう
ただいま回答率
85.37%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

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

Q&A

解決済

1回答

2792閲覧

unityでiOSアプリを作成しており、LocationServiceを使っています。取得データの更新頻度を上げたいです。

yama_kawa_mori

総合スコア1

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

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

0グッド

0クリップ

投稿2021/08/29 08:34

Input.location.lastDataに含まれるデータの更新頻度を向上したいです。

iOS上で動作する位置情報ゲームをUnityにて作成しております。
LocationServiceを使用して緯度や軽度などのデータを取得しておりますが、現状、Input.location.lastDataに含まれるデータの更新がなかなか行われず、実際の位置との誤差が大きく出てしまいます。
15mほど移動するとInput.location.lastDataが更新されることを確認しておりますが、可能であればそのような移動なしにデータ更新が為されればと思っております。

C#

1using System; 2using System.Timers; 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6 7public class Locations : MonoBehaviour 8{ 9 public double latitude = 0; // 緯度 10 public double longitude = 0; // 経度 11 public double altitude = 0; // 高度 12 public int gps_count = 0; // 位置情報取得回数 13 public string message; // エラーメッセージ 14 15 public float[] interval = {0.0625f, 0.25f, 1.0f}; // [1/16s, 1/4s, 1/1s] 16 public string[] intervalText = {"1/16", "1/4", "1/1"}; 17 public int intervalId = 0; 18 19 private void Start() 20 { 21 // First, check if user has location service enabled 22 if(!Input.location.isEnabledByUser) 23 { 24 Debug.Log("GPS not enabled"); 25 message = "GPS not enabled"; 26 } 27 28 // Start service before querying location 29 Input.location.Start(); 30 31 // Wait until service initializes 32 int maxWait = 15; 33 Timer timer = new Timer(1000); 34 timer.Elapsed += (sender, e) => 35 { 36 if(Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) maxWait--; 37 else timer.Stop(); 38 }; 39 timer.Start(); 40 41 // Service didn't initialize in 20 seconds 42 if(maxWait <= 0) 43 { 44 Debug.Log("Timed out"); 45 message = "Timed out"; 46 } 47 48 // Connection has failed 49 if(Input.location.status == LocationServiceStatus.Failed) 50 { 51 Debug.Log("Unable to determine device location"); 52 message = "Unable to determine device location"; 53 } 54 } 55 56 public void LocationService() 57 { 58 if(Input.location.status == LocationServiceStatus.Running) 59 { 60 latitude = Math.Round(Input.location.lastData.latitude, 7); 61 longitude = Math.Round(Input.location.lastData.longitude, 7); 62 altitude = Math.Round(Input.location.lastData.altitude, 7); 63 gps_count++; 64 } 65 } 66 67 public void IntervalChange() 68 { 69 intervalId = ++intervalId % interval.Length; 70 } 71} 72

試したこと

以下の手段で該当データが更新されることを確認しております。
=====
15mほど移動する。
アプリをタスクキルし、再起動する。
=====

補足情報(FW/ツールのバージョンなど)

unity 2020.3.15f2

なにとぞ、ご教授お願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

LocationService.Start() を呼ぶ時に引数 desiredAccuracyInMeters, updateDistanceInMeters を指定できます。

desiredAccuracyInMeters - desired service accuracy in meters. Using higher value like 500 usually does not require to turn GPS chip on and thus saves battery power. Values like 5-10 could be used for getting best accuracy. Default value is 10 meters.

updateDistanceInMeters - the minimum distance (measured in meters) a device must move laterally before Input.location property is updated. Higher values like 500 imply less overhead. Default is 10 meters.

位置情報の更新を頻繁にしたり、正確に位置情報を取得しようとするとバッテリー消費が増えます。

投稿2021/08/29 10:27

bboydaisuke

総合スコア5291

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

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

yama_kawa_mori

2021/08/29 12:05

リンク先のサイトに記載されている内容を確認し、更新頻度の設定をInput.location.Start()の引数で変更できることを理解しました。 ご回答いただきありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問