2017-01-21 116 views
1

我使用的是Unity的GPS系统,并注意到它从未更新过。我不得不关闭应用程序并重新启动它以获取当前位置。自动更新GPS位置

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class TestLocationService : MonoBehaviour { 
    public GameObject longText; 
    public GameObject latText; 

    IEnumerator Start() { 
     Text longitudeText = longText.GetComponent<Text>(); 
     Text latitudeText = latText.GetComponent<Text>(); 

     if (!Input.location.isEnabledByUser) 
      yield break; 

     Input.location.Start(); 

     int maxWait = 20; 
     while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) { 
      yield return new WaitForSeconds(1); 
      maxWait--; 
     } 

     if (maxWait < 1) { 
      print("Timed out"); 
      yield break; 
     } 


     if (Input.location.status == LocationServiceStatus.Failed) { 
      print("Unable to determine device location"); 
      yield break; 
     } else { 
      print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); 
      longitudeText.text = "Longitude: " + Input.location.lastData.longitude; 
      latitudeText.text = "Latitude: " + Input.location.lastData.latitude; 
     } 

     Input.location.Stop(); 
    } 
} 

我希望在自动更新到我目前所在的位置时有一些帮助!提前致谢!

+0

你指望它来更新?你有什么尝试? – Jecoms

回答

1

您所拥有的密码将显示一次GPS位置,然后拨打Input.location.Stop();即可停止GPS。

print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); 
longitudeText.text = "Longitude: " + Input.location.lastData.longitude; 
latitudeText.text = "Latitude: " + Input.location.lastData.latitude; 

while循环再加入yield return new WaitForSeconds(1);while循环中等待一段时间。另一种方法是启动另一个协程,随着时间的推移更新GPS位置。

事情是这样的:

public class TestLocationService : MonoBehaviour 
{ 

    public GameObject longText; 
    public GameObject latText; 

    IEnumerator coroutine; 

    IEnumerator Start() 
    { 
     coroutine = updateGPS(); 

     Text longitudeText = longText.GetComponent<Text>(); 
     Text latitudeText = latText.GetComponent<Text>(); 

     if (!Input.location.isEnabledByUser) 
      yield break; 

     Input.location.Start(); 

     int maxWait = 20; 
     while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) 
     { 
      yield return new WaitForSeconds(1); 
      maxWait--; 
     } 

     if (maxWait < 1) 
     { 
      print("Timed out"); 
      yield break; 
     } 


     if (Input.location.status == LocationServiceStatus.Failed) 
     { 
      print("Unable to determine device location"); 
      yield break; 
     } 
     else 
     { 
      print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); 
      longitudeText.text = "Longitude: " + Input.location.lastData.longitude; 
      latitudeText.text = "Latitude: " + Input.location.lastData.latitude; 
      StartCoroutine(coroutine); 
     } 
    } 

    IEnumerator updateGPS() 
    { 
     float UPDATE_TIME = 3f; //Every 3 seconds 
     WaitForSeconds updateTime = new WaitForSeconds(UPDATE_TIME); 

     while (true) 
     { 
      print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); 
      //longitudeText.text = "Longitude: " + Input.location.lastData.longitude; 
      //latitudeText.text = "Latitude: " + Input.location.lastData.latitude; 
      yield return updateTime; 
     } 
    } 

    void stopGPS() 
    { 
     Input.location.Stop(); 
     StopCoroutine(coroutine); 
    } 

    void OnDisable() 
    { 
     stopGPS(); 
    } 
} 
+0

出于某种原因,应用程序首次打开后崩溃,然后我不得不重新打开它,此时它在大约20秒后崩溃。每次我打开它后,它也会在20秒后崩溃,直到我完全退出它,然后立即崩溃。它确实显示我的位置数据。顺便说一下,我在Android棒棒糖上。 –

+0

我没有看到任何可以在这里崩溃的应用程序。你的Unity版本是什么?你可以尝试在另一个Android设备上试试这个,看看崩溃是否仍然存在? – Programmer

+0

我正在使用Unity 5.5.0f3,我在另一个Android设备上尝试了它,发生了同样的事情。 –