查了很多关于Mapbox的资料,其他平台的都还好,Unity平台的都太少了,而且官方的API也很不走心,有的居然连字段说明都不给,全靠自己摸索…在此记录一下,既是分享,也是自留。
一、已有文件导入
在MapboxStudio内进入Tilesets界面,导入已有数据
1、GeoJSON,直接导入即可
2、Shapefile (zipped),需要将Shapefile压缩成zip格式,值得注意的是:
(1)文件夹内即使有非shp文件也可以,mapbox在处理时会自动忽略掉不用的文件
(2)最终的模型加载速度受shp文件大小影响,与.exe及其他文件无关
(3)shp图层属性表记得加个高度属性
其他数据大同小异,我没试过,后续再补充
二、生成TilesetId
三、数据预览(可跳过)
在MapboxStudio内进入Style界面,选择任意一个已有样式
1、添加图层
2、切换type
3、设置高度
(1)use s formula
(2)选择高度属性
4、更改样式并预览
一、导入Maps SDK for Unity
导入SDK后一定会报错(微笑脸),提供几个解决方案:
1、如果只是实现加载地图和三维模型这种简单功能的话,可以把导入的AR有关的文件删除
2、删除AR文件后还有报错的,打开脚本看一下,搜一下是不是unity版本不同,方法不同。举个例子,低版本的unity允许gameObject.active,而高版本的提示已废用,使用gameObject.activeSelf
3、还有问题的,我也不知道什么原因,注释掉,不要删,万一以后有用呢
不报错后就可以填入mapbox Key了,valid以后就可以进入正题了
二、AbstractMap配置
新建场景,新建EventSystem,拖入Map预设
!!!!重点:AbstractMap!!!!
1、GENERAL
代码更改视角中心经纬度、缩放级别:
public AbstractMap map = new AbstractMap();
//切换地图中心至东方明珠
public void switchCenterToSH()
{
if (toggle_SH.isOn){
map.Options.locationOptions.latitudeLongitude = "31.242,121.495";
Mapbox.Utils.Vector2d v = new Mapbox.Utils.Vector2d(31.242, 121.495);
map.UpdateMap(v);
map.SetZoom(10);
}
}
2、IMAGE(底图)
此处选择Style,选择Custom的话,输入MapboxStudio内自定义的StyleID即可
代码更改:
//Image 切换二维底图
public ImagerySourceType imagerySourceType_street = new ImagerySourceType();
public ImagerySourceType imagerySourceType_satellite = new ImagerySourceType();
//切换底图、三维
public void switchBG()
{
//底图切换
if (toggle_street.isOn)
{
map.ImageLayer.SetProperties(imagerySourceType_street, false, false, false);
}
else if (toggle_satellite.isOn)
{
map.ImageLayer.SetProperties(imagerySourceType_satellite, false, false, false);
}
}
3、TERRAIN(地形)
同上,可加载自定义地形,个人猜测demo——我的世界 的实现,就是先制定好自定义地形,再加载
代码修改如下:
//elevationSourceType_Terrain需要预设
map.Terrain.SetProperties(elevationSourceType_Terrain, elevationLayerType_normal, false, 1, 0);
4、MAP LAYERS(图层)
TilesetId:自定义
MapFeatures:加载当前tilesetId对应的图层
DataLayer:图层
Filter:添加过滤(显示高度>2米的建筑等)
Modeling:模型设置
PropertyName:属性名称(高度)
Texturing:模型贴图