[官方文档] http://docs.unity3d.com/Documentation/ScriptReference/LocationService.Start.html
为应用开启定位权限
示例代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Android; /// <summary> /// GPS测试 /// </summary> public class GPSTest : MonoBehaviour { [SerializeField] private Text mText; public void OnClickGPS() { StartCoroutine(StartupGPS()); } IEnumerator StartupGPS() { // 检测定位服务有没开启 if (!Input.location.isEnabledByUser) { mText.text = "定位服务未开启"; //请求GPS权限 Permission.RequestUserPermission(Permission.FineLocation); yield break; } // 启动定位服务 Input.location.Start(5, 5); // 等待定位服务初始化完成 int maxWait = 20; while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) { yield return new WaitForSeconds(1); maxWait--; mText.text = $"正在初始化位置服务({maxWait}s)"; } // 如果定位服务在20秒内还未完成,则报告超时。 if (maxWait < 1) { mText.text = "连接GPS超时"; yield break; } // 如果连接失败,则会取消定位服务的使用 if (Input.location.status == LocationServiceStatus.Failed) { mText.text = "位置服务失败(用户拒绝访问位置服务)"; yield break; } else { //如果连接成功,则获取当前位置信息 //longitude(经度),latitude(纬度),altitude(海拔高度) //horizontalAccuracy(水平精度),verticalAccuracy(垂直精度) LocationInfo info = Input.location.lastData; string text = string.Format( "经度: {0}\n" + "纬度: {1}\n" + "水平精度: {2}\n" + "垂直精度: {3}\n" + "海拔高度: {4}\n" + "时间戳: {5}", info.longitude, info.latitude, info.horizontalAccuracy, info.verticalAccuracy, info.altitude, info.timestamp); mText.text = text; } //如果不再需要查询位置信息,则关闭服务 Input.location.Stop(); } }
获取到的GPS位置信息