这是一个将经纬度坐标信息转换为Unity的场景坐标信息的坐标转换工具。
前期工作:
打开地图拾取坐标系统:
百度地址:https://api.map.baidu.com/lbsapi/getpoint/index.html
高德地址:高德地图API
选择好工程需要的区域后进行截图。
鼠标右键查看这个图片的尺寸大小。
在Unity场景中创建一个Plane作为一个区域地面。
调整缩放大小为图片的分辨率大小并将刚才的图片为这个平面对象的贴图。
上完贴图之后在Scene顶视图视角查看,发现是和网页显示镜像的,即便如此也不做任何调整。
从网页拾取坐标系统(百度或高德)中点取范围的左上角(我一边都是点击一个文字或者编辑图案,这样好在Unity中找到对应的位置)一个位置获取这个位置的经纬度数据,右下角也是如此操作。
TL(左上角)和BR(右下角) 是空对象将这两个点按照网页的位置摆好到对应的位置。
将两个范围角点对象设置到UnityGPS脚本上并将对应位置的拾取到的经纬度数据设置好。
在设置的时候值得注意的是,如果是从百度上拾取的要把加密类型设置从BD09,高德的话设置层GCJ02,如果是非加密定位数据就使用WGS84,说白了,你用到的经纬度信息是什么类型的投影坐标系用的什么类型的加密协议。
到此都设置好了,在使用的时候肯定有一些偏差的,就是看工程对这些偏差能不能接收,这些偏差的造成是由图片畸形和范围的两个点(左上和右下)的位置摆放误差和经纬度数据偏差甚至由经纬度的双精度转换成unity的位置单精度等等原因吧造成的。
这个有个计算机可以使用:
非运行时也可用。
代码重点:
可以看出,UnityGPS是一个单例。
使用经纬度转换成的Unity坐标位置每有高位信息的,只有XZ水平面,可以使用Altitude作为一个同一的模拟高度信息。
初始化在是Start()时机进行的,有需要的话可以进行监听。
这三个是核心的方法了,从经纬度转换到Unity场景坐标还是Unity场景坐标转换成经纬度都可以。