using UnityEngine; using System.Collections;
public enum LocationError { ERROR_NONE, //沒有錯誤 ERROR_NOT_ENABLED, //GPS未啟用 ERROR_TIMEOUT, //請求超時 ERROR_FAILED, //請求失敗
} public class LocationInfo { /// /// Geographical device location latitude. 緯度 /// public float latitude; /// /// Geographical device location longitude 經(jīng)度 /// public float longitude; /// /// Geographical device location altitude /// public float altitude; /// /// Horizontal accuracy of the location. /// public float horizontalAccuracy; /// /// Vertical accuracy of the location. /// public float verticalAccuracy; /// /// Timestamp (in seconds since 1970) when location was last time updated /// public double timestamp;
public string error = null;public LocationError errcode = LocationError.ERROR_NONE;}
public class LocationHelp : MonoBehaviour {
public static LocationHelp _instance=null;public static LocationHelp Instance{ get { return _instance; }}void Awake(){ _instance = this;}public delegate void GetLocationCallback(LocationInfo location);public static GetLocationCallback GetUserLocation;public void GetLocation(GetLocationCallback callback){ StartCoroutine(GetGPS(callback));}IEnumerator GetGPS(GetLocationCallback callback){ LocationInfo info = new LocationInfo(); if (!Input.location.isEnabledByUser) { info.errcode = LocationError.ERROR_NOT_ENABLED; info.error = "用戶未開啟GPS"; Debug.Log("用戶未開啟GPS"); callback(info); yield break; } // Input.location.Start(); Input.location.Start(5.0f, 5.0f); int maxWait = 5; while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) { yield return new WaitForSeconds(1); maxWait--; } if (maxWait < 1) { info.errcode = LocationError.ERROR_TIMEOUT; info.error = "獲取GPS信息超時"; Debug.Log("獲取GPS信息超時"); callback(info); yield break; } if(Input.location.status == LocationServiceStatus.Failed) { info.errcode = LocationError.ERROR_FAILED; info.error = "獲取GPS信息失敗"; Debug.Log("獲取GPS信息失敗"); callback(info); yield break; } info.latitude = Input.location.lastData.latitude; info.longitude = Input.location.lastData.longitude; info.altitude = Input.location.lastData.altitude; info.horizontalAccuracy = Input.location.lastData.horizontalAccuracy; info.verticalAccuracy = Input.location.lastData.verticalAccuracy; info.timestamp = Input.location.lastData.timestamp; callback(info);}}
新聞熱點
疑難解答