Unity之GPS定位

  • Unity之GPS定位(高德解析)
  • 前言
  • 开篇
  • Unity版本及使用插件
  • 正题
  • 创建场景
  • 写脚本
  • 把脚本挂载到场景中
  • 打包发布场景
  • 安装真机并且测试
  • 代码中的==Key==怎么来的
  • 1、找平台
  • 2、登录或者申请账号
  • 3、获取KEY
  • 结尾
  • 结尾唠叨
  • 今日无推荐


Unity之GPS定位(高德解析)

前言

开篇

  • 哈喽艾瑞宝嘚,又一周没见到小黑了,肯定想我了吧。
  • 既然这样,那小黑一定要给大家一个忠告,在办公大楼上厕所千万别玩手机啊~~小黑深受其害,手机(OPPO R9 Plus)自己提前退休了,其实还是有些不舍得的,不过毕竟用了4年多了,也该换了,然后今儿手机到了,心情很好啊,哈哈哈哈哈哈哈!
  • 好了好了,不给大家扯皮了,咱们直入主题!

Unity版本及使用插件

说到Unity版本,那当然还是老样子啦,Unity2019.4.4f1
插件用到了:LitJson

正题

  • 这两天项目上边说是让加一个显示当前位置的功能,那我一想那不就是定位么,果断就答应了,这是学习的时候啊,然而,我马上就搜到了大佬的博客,然后有了下边的代码。。。。。。。。
  • 当然了啊,我也自己想了好多完善了好多,不过这版中只有申请权限。

创建场景

第一步在场景中创建相关Text文本,用来显示

Unity中EasyAR空间定位 unity地图定位_GPS

写脚本

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());
                }
            }
        }
    }
}

把脚本挂载到场景中

Unity中EasyAR空间定位 unity地图定位_GPS_02

打包发布场景

Unity中EasyAR空间定位 unity地图定位_GPS_03

安装真机并且测试

小黑为了给你们看动态结果,只好先拿手机录像,并且从电脑上制作GIF图看咯。

Unity中EasyAR空间定位 unity地图定位_c#_04


怎么样,是不是很顶!!!!给👍👍👍👍👍👍👍啊

代码中的Key怎么来的

1、找平台

随便打开一个浏览器并且在搜索栏输入:高德开发者平台

Unity中EasyAR空间定位 unity地图定位_Unity中EasyAR空间定位_05

2、登录或者申请账号

Unity中EasyAR空间定位 unity地图定位_GPS_06

3、获取KEY

  • 首先顶部导航栏点击开发支持=>Web服务=>Web服务API
  • 进入页面后往下滑
  • Unity中EasyAR空间定位 unity地图定位_程序人生_07

  • 进入页面后右上角点击创建新应用
  • 然后在创建好的应用上边点击增加
  • Unity中EasyAR空间定位 unity地图定位_c#_08

  • 如何创建有key的应用呢
  • Unity中EasyAR空间定位 unity地图定位_Unity中EasyAR空间定位_09

  • 然后我们就能看到相关的key值了,把它复制到脚本中,然后使用吧!