Unity之GPS定位
- Unity之GPS定位(高德解析)
- 前言
- 开篇
- Unity版本及使用插件
- 正题
- 创建场景
- 写脚本
- 把脚本挂载到场景中
- 打包发布场景
- 安装真机并且测试
- 代码中的==Key==怎么来的
- 1、找平台
- 2、登录或者申请账号
- 3、获取KEY
- 结尾
- 结尾唠叨
- 今日无推荐
Unity之GPS定位(高德解析)
前言
开篇
- 哈喽艾瑞宝嘚,又一周没见到小黑了,肯定想我了吧。
- 既然这样,那小黑一定要给大家一个忠告,在办公大楼上厕所千万别玩手机啊~~,小黑深受其害,手机(OPPO R9 Plus)自己提前退休了,其实还是有些不舍得的,不过毕竟用了4年多了,也该换了,然后今儿手机到了,心情很好啊,哈哈哈哈哈哈哈!
- 好了好了,不给大家扯皮了,咱们直入主题!
Unity版本及使用插件
说到Unity版本,那当然还是老样子啦,Unity2019.4.4f1
插件用到了:LitJson
正题
- 这两天项目上边说是让加一个显示当前位置的功能,那我一想那不就是定位么,果断就答应了,这是学习的时候啊,然而,我马上就搜到了大佬的博客,然后有了下边的代码。。。。。。。。
- 当然了啊,我也自己想了好多完善了好多,不过这版中只有申请权限。
创建场景
第一步在场景中创建相关Text文本,用来显示
写脚本
using UnityEngine;
using System.Collections;
using LitJson;
using UnityEngine.Networking;
using UnityTools;
using UnityEngine.Android;
namespace Location
{
public class LocationTest : MonoBehaviour
{
private string longitude;//经度
private string latitude;//纬度
void Start() => StartCoroutine(StartGPS());
IEnumerator StartGPS()
{
//Unity给我们提供的一个相关权限类 Permission,可以判断当前相关权限是否开启
if (Permission.HasUserAuthorizedPermission(Permission.FineLocation))
{
//如果没有开启就提示开启权限
Permission.RequestUserPermission(Permission.FineLocation);
}
Debuger.LogError("开始获取GPS信息");
// 检查位置服务是否可用
if (!Input.location.isEnabledByUser)
{
Debuger.Log("位置服务不可用");
yield break;
}
// 查询位置之前先开启位置服务
Debuger.Log("启动位置服务");
Input.location.Start();
// 等待服务初始化
int maxWait = 20;
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
Debuger.Log(Input.location.status.ToString() + ">>>" + maxWait.ToString());
yield return new WaitForSeconds(1);
maxWait--;
}
// 服务初始化超时
if (maxWait < 1)
{
Debuger.Log("服务初始化超时");
yield break;
}
// 连接失败
if (Input.location.status == LocationServiceStatus.Failed)
{
Debuger.Log("无法确定设备位置");
yield break;
}
else
{
Debuger.Log("Location: \n" +
"纬度:" + Input.location.lastData.latitude + " \n" +
"经度:" + Input.location.lastData.longitude + " \n" +
"海拔:" + Input.location.lastData.altitude + " \n" +
"水平精度:" + Input.location.lastData.horizontalAccuracy + " \n" +
"垂直精度:" + Input.location.lastData.verticalAccuracy + " \n" +
"时间戳:" + Input.location.lastData.timestamp);
longitude = Input.location.lastData.longitude.ToString();
latitude = Input.location.lastData.latitude.ToString();
StartCoroutine(GetRequest(
"http://restapi.amap.com/v3/geocode/regeo?key="+ key + "&location=" + longitude + "," + latitude));
}
// 停止服务,如果没必要继续更新位置,(为了省电
Input.location.Stop();
}
string key = ""; //去高德地图开发者申请
IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
string[] pages = uri.Split('/');
int page = pages.Length - 1;
if (webRequest.isNetworkError)
{
// Debug.Log(pages[page] + ": Error: " + webRequest.error);
}
else
{
JsonData jd = JsonMapper.ToObject(webRequest.downloadHandler.text);
Debuger.LogError("rn" + jd["regeocode"]["formatted_address"].ToString());
}
}
}
}
}
把脚本挂载到场景中
打包发布场景
安装真机并且测试
小黑为了给你们看动态结果,只好先拿手机录像,并且从电脑上制作GIF图看咯。
怎么样,是不是很顶!!!!给👍👍👍👍👍👍👍啊
代码中的Key怎么来的
1、找平台
随便打开一个浏览器并且在搜索栏输入:高德开发者平台
2、登录或者申请账号
3、获取KEY
- 首先顶部导航栏点击开发支持=>Web服务=>Web服务API
- 进入页面后往下滑
- 进入页面后右上角点击创建新应用
- 然后在创建好的应用上边点击增加
- 如何创建有key的应用呢
- 然后我们就能看到相关的key值了,把它复制到脚本中,然后使用吧!