关于GPS的定位服务,原生的iOS和Android都可以实现,但是Unity和ios、android的交互略微麻烦。因此Unity官方给我们提供好了关于GPS的服务,就在我们熟悉的Input当中。他就是Input.Location;

相关的API,有两个:LocationService 和 LocationInfo 。

LocationService 负责启动和关闭定位服务。

LocationInfo  在服务启动后,获取定位数据信息。

LocationService

官方说明链接:http://docs.unity3d.com/Documentation/ScriptReference/LocationService.Start.html

LocationService 中有三个属性,和两个方法:

(1)isEnabledByUser   -- 检测用户设置里的定位服务是否启用(首次会弹出提示,询问用户是否同意。)

(2)lastData   -- 最近一次测量的地理位置(LocationInfo lastData; 也就是要和 LocationInfo 关联了)

(3)status   -- 定位服务的状态。

定位服务的状态包括:

Stopped
Location service is stopped. 定位服务已经停止
Initializing
Location service is initializing, some time later it will switch to.  定位服务正在初始化,在一段时间后,状态会切换回来。
Running
Location service is running and locations could be queried.  位置服务正在运行,位置可以获取。
Failed
Location service failed (user denied access to location service).  位置服务失败(用户拒绝访问位置服务)。

(4)Start ( )   -- 启动定位服务,更新定位数据。可以获取最近更新的位置坐标。

数据接收,是通过 Input.location.lastData 来实现的。服务不能马上获得定位数据。代码必须检查Input.location.status以获取当前的定位服务状态。

看一下函数定义:

void Start(float desiredAccuracyInMeters = 10f, float updateDistanceInMeters = 10f);

参数详解:

desiredAccuracyInMeters  服务所需的精度,以米为单位。如果使用较高的值,比如500,那么通常不需要打开GPS芯片(比如可以利用信号基站进行三角定位),从而节省电池电量。像5-10这样的值,可以被用来获得最佳的精度。默认值是10米。

updateDistanceInMeters  最小距离(以米为单位)的设备必须横向移动前Input.location属性被更新。较高的值,如500意味着更少的开销。默认值是10米。

(5)Stop ( )  -- 停止定位服务的定位更新。这对节省电池的电量非常有用。

LocationInfo

属性如下:

(1) altitude -- 海拔高度

(2) horizontalAccuracy -- 水平精度

(3) latitude -- 纬度

(4) longitude -- 经度

(5) timestamp -- 最近一次定位的时间戳,从1970开始

(6) verticalAccuracy -- 垂直精度

这些属性,除了timestamp为double外, 其余全为 float 型。

官方脚本:

[csharp] view plain copy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class TestLocationService : MonoBehaviour
  4. {
  5. IEnumerator Start()
  6. {
  7. // First, check if user has location service enabled
  8. if (!Input.location.isEnabledByUser)
  9. yield break;
  10. // Start service before querying location
  11. Input.location.Start();
  12. // Wait until service initializes
  13. int maxWait = 20;
  14. while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
  15. {
  16. yield return new WaitForSeconds(1);
  17. maxWait--;
  18. }
  19. // Service didn't initialize in 20 seconds
  20. if (maxWait < 1)
  21. {
  22. print("Timed out");
  23. yield break;
  24. }
  25. // Connection has failed
  26. if (Input.location.status == LocationServiceStatus.Failed)
  27. {
  28. print("Unable to determine device location");
  29. yield break;
  30. }
  31. else
  32. {
  33. // Access granted and location value could be retrieved
  34. print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
  35. }
  36. // Stop service if there is no need to query location updates continuously
  37. Input.location.Stop();
  38. }
  39. }

问题跟踪:

Android闪退:

1.Unity5.6以下,LocationServer存在一定的缺陷,实测android5.0以上机型,部分闪退。官方于5.6.1修复该问题。建议使用Unity5.6.1以上版本。

2.部分android机即使用5.6.x以上打测试包APK,依然闪退。

a>当手机弹出警告框“是否允许使用定位服务”时,一定选择允许。

b>检查设置中隐私中,是否对应用的定位服务开启。

b>有些手机允许了定位服务,隐私中也确实开启了定位服务。但是依然闪退,原因:以小米手机为例,有一个模式叫:对未知应用的信任,如果选择否,那么手机是只信任正式渠道的签名APK,我们的测试APK包都属于“未知应用”,因此即使在隐私的定位中开启了对该应用的定位服务,但是由于手机就不信任“未知应用”,所以依然会闪退。

IOS闪退:

1.添加Info.plist中的权限就OK了;

a>NSLocationAlwaysUsageDescription

b>NSLocationWhenInUseUsageDescription

在Unity中实现GPS定位相关推荐

  1. 资产监测技术中关于GPS定位工具中的PDOP参数

    近期笔者在开发资产监测设备技术过程中,遇到了客户询问的关于GPS定位的精度问题.资产监测设备主要采用了WIFI/GNSS/LBS的定位方式,该设备主要应用于贵重物品运输监测.集装箱货物运输跟踪,帮助用 ...

  2. Android碎片知识(十).开发中的gps定位(转)

    一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...

  3. android中实现GPS定位功能,Android中实现GPS定位的简单例子

    今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了一些修改,希望对大家的帮助.具体代码如下:  要实用Adnroid平台的GPS设备,首先需要添加上 ...

  4. Unity GPS定位之逆地理编码(获取经纬度并转换成地理位置)

    unity定位 前言 最近在做一款手游,然后策划给的需求就是定位到当前用户所在的城市,然后花了一个上午给做了出来,思路大概就是通过手机定位获取到当前位置的经度和纬度,然后通过各个地图(我这里用的是百度 ...

  5. Unity之GPS定位(高德解析)

    Unity之GPS定位 Unity之GPS定位(高德解析) 前言 开篇 Unity版本及使用插件 正题 创建场景 写脚本 把脚本挂载到场景中 打包发布场景 安装真机并且测试 代码中的==Key==怎么 ...

  6. Uber是如何重新思考GPS定位的(尤其是在城市峡谷中)

    郑昀(公众号:老兵笔记) 20180424 2018年4月19日,Uber 公布了 GPS 优化算法,https://eng.uber.com/rethinking-gps/,针对GPS定位在城市环境 ...

  7. android 百度坐标 gps,Android中gps定位不返回经纬度的解决方案

    定位,算是android应用中一个非常常见的功能了吧,并且大部分的应用里基本也都会用到地图,所以以前的做法基本都是直接接入了百度.高德这些第三方定位,也没遇到过什么问题. 然而,最近的工作基本上都是做 ...

  8. Unity之GPS定位(腾讯sdk)

    Unity之GPS定位(腾讯sdk) 目录 Unity之GPS定位(腾讯sdk) 前言 Unity版本及使用插件 正题 编写脚本 Run运行, 跑起来就行,具体要什么,去相关类找就好了. 没有腾讯地图 ...

  9. 时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

    NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备[如计算机.手机]的时间的协议. NTP 实现什么目的?   目的很简单,就是为了提供准确 ...

最新文章

  1. Vita Helper v0.08 Build 20140722
  2. windows主机网络信息获取程序设计
  3. Windows Server 2016 Hyper-v 嵌套虚拟化技术
  4. Linux游戏0 A.D.操作说明(持续更新中)
  5. ubuntu linux本地源,如何制作UbuntuLinux操作系统的本地源?
  6. 三星国行S10 5G版本要来了?这次它抢在了国产手机的前面
  7. 362. Design Hit Counter
  8. 从产品经理到产品架构师
  9. Java实现简单计算器
  10. ADB远程桌面连接本地手机
  11. 解决Tomcat中文乱码
  12. Mac装双系统建议 及 减少发热的解决方法
  13. 看小伙如何跟反爬抗争到底
  14. 手机版中国银联php,中国银联手机移动支付接口,php语言,在ecshop,shopex等的wap版本上完美实现移动支付...
  15. 汤姆熊游艺厅抓娃娃技巧汇总
  16. win10误禁用任务计划程序导致任务栏里的输入法丢失
  17. 安装sql server 过程(为了使用SQL Server Management Studio)
  18. 心得分享——c语言如何将多个字符串赋值给字符串数组(即c语言如何输入并储存多个字符串)
  19. 程序员是不是“后浪”?
  20. 数据安全的下一个风口:SASE云服务平台

热门文章

  1. 自定义配置log日志
  2. ${pageContext.request.contextPath}的作用
  3. 单片机的程序结束后都干嘛去了?
  4. [Power Query] 标题提升
  5. uni-app 180查看好友朋友圈完善(一)
  6. 如何使用WGCLOUD实时监控网站状态并告警
  7. instandceof
  8. centos7 杀不死 httpd (Apache )
  9. excel统计每个单元格内的单词及空格的个数
  10. 一分钟解决“仅限中国大陆地区播放” (转)