关于Unity和高德地图配置
获取高德SDK
详见 https://lbs.amap.com/api/android-location-sdk/locationsummary/
导包
libs导入jar包,jniLibs导入so库
显示地图
权限申请
AndroidManifest.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
实现定位
LocationActivity :
1 | package com.njust.locationtest; |
显示地图
MainActivity :
1 | package com.njust.locationtest; |
以上,在AndroidStudio中可顺利获取地图和经纬度。
但是!!!由于地图对Unity支持度不高,所以打包转unity什么的很麻烦,所以暂时采用Unity 中 Gomap插件进行地图的导入。
由于GoMap使用的是MapBox定位,担心那一天国内不能用,所以先做这个插件预备,用于获取经纬度及经纬度数据。但是其中地图渲染和坐标转换之类的API完全比不上GoMap。
引入GoMap插件实现LBS
导入插件
新建Unity 工程,导入GoMap插件及输入密钥。
坑
做到根据经纬度生成宝可梦的时候会遇到一个很可怕的事情,unityEngine里面有一个类叫Coordinates,GoMap里面也有一个类叫Coordinates,重名会产生二义性,然后我找不到排除指定类的方法。我用了一个最蠢的办法,把GoMap中所有叫Coordinates的都改成了GoShared.Coordinates
设置特殊生成宝可梦的POI点
先在地图上获取想要生成宝可梦的POI点经纬度或区域(拓展:可加入天气数据)
坐标转换的代码如下:
1 | using System.Collections; |
SetCude()可改为读取服务端数据生成宝可梦
引入Vuforia插件实现AR
下载插件
可以在AssetStore中下载资源(免费的),然后到官网注册获取密钥
新建AR Scene
新建ARCamera
World Center Mode记得改成DEVICE以及Vuforia Configeration中的Device Tracker 的Track Device Pose 记得勾选,不同版本的Vuforia设置设备追踪的方法都不一样,我这个是10.15版本最新的。
在ARCamera子物件绑定一个坐标用于生成精灵球
坐标为相对ARCamera的一个坐标
在AR场景中选取随机位置生成宝可梦
宝可梦设定Y轴为0,以便显示在地上。ARCamera改成手持高度大概1.6米位置(注:ARCamera 中使用的坐标单位与现实相同)。
但是实机测试发现显示的位置和Unity自带模拟的不一样,ARCamera的Z轴依旧为0。
背包系统
背包系统保留初代设定,一个训练家只允许获取6只宝可梦。可通过丢弃或替换更换宝可梦。
图鉴显示
目前还没找到正版图片资源,目前打算是未获取的宝可梦是黑色剪影+静态+???作为名字,已捕获宝可梦为3D缩略模型+待机状态+最大CP值+名字,已编成宝可梦为3D缩略模型+待机状态+CP值+名字点开可查询常出没地点和属性。
由于提取3D模型过于复杂,决定这个等提取完3d模型后再进行优化。
背包显示
背包目前只实现显示前三个已获取宝可梦,有待实现丢弃功能。
后续功能待添加
坐标相关
由于定位实在是太不灵敏了,在map上加了一个虚拟摇杆,也方便在宿舍进行测试。后续如果改成高德定位可能还会删掉吧,有点可惜。
存档功能
采用EasySave进行存档,实现了存档读档功能,后续想增加删档和读地图资源功能。在客户端实现一些简单服务端服务。
部分代码如下:
1 | using System.Collections; |