Unity 加载 Mapbox 三维图层

查了很多关于Mapbox的资料,其他平台的都还好,Unity平台的都太少了,而且官方的API也很不走心,有的居然连字段说明都不给,全靠自己摸索…在此记录一下,既是分享,也是自留。

前提——数据处理

一、已有文件导入
在MapboxStudio内进入Tilesets界面,导入已有数据
Unity 加载 Mapbox 三维图层_第1张图片
1、GeoJSON,直接导入即可
2、Shapefile (zipped),需要将Shapefile压缩成zip格式,值得注意的是:
(1)文件夹内即使有非shp文件也可以,mapbox在处理时会自动忽略掉不用的文件
Unity 加载 Mapbox 三维图层_第2张图片
(2)最终的模型加载速度受shp文件大小影响,与.exe及其他文件无关
(3)shp图层属性表记得加个高度属性
Unity 加载 Mapbox 三维图层_第3张图片

其他数据大同小异,我没试过,后续再补充

二、生成TilesetId
Unity 加载 Mapbox 三维图层_第4张图片
三、数据预览(可跳过)
在MapboxStudio内进入Style界面,选择任意一个已有样式
1、添加图层
Unity 加载 Mapbox 三维图层_第5张图片
2、切换type
Unity 加载 Mapbox 三维图层_第6张图片
3、设置高度
(1)use s formula
Unity 加载 Mapbox 三维图层_第7张图片
(2)选择高度属性
Unity 加载 Mapbox 三维图层_第8张图片
4、更改样式并预览
Unity 加载 Mapbox 三维图层_第9张图片

核心——Unity加载

一、导入Maps SDK for Unity
导入SDK后一定会报错(微笑脸),提供几个解决方案:
1、如果只是实现加载地图和三维模型这种简单功能的话,可以把导入的AR有关的文件删除
2、删除AR文件后还有报错的,打开脚本看一下,搜一下是不是unity版本不同,方法不同。举个例子,低版本的unity允许gameObject.active,而高版本的提示已废用,使用gameObject.activeSelf
3、还有问题的,我也不知道什么原因,注释掉,不要删,万一以后有用呢

不报错后就可以填入mapbox Key了,valid以后就可以进入正题了

二、AbstractMap配置
新建场景,新建EventSystem,拖入Map预设
Unity 加载 Mapbox 三维图层_第10张图片
!!!!重点:AbstractMap!!!!
1、GENERAL
Unity 加载 Mapbox 三维图层_第11张图片
代码更改视角中心经纬度、缩放级别:

	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(底图)
Unity 加载 Mapbox 三维图层_第12张图片
此处选择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(地形)
Unity 加载 Mapbox 三维图层_第13张图片
同上,可加载自定义地形,个人猜测demo——我的世界 的实现,就是先制定好自定义地形,再加载
代码修改如下:

//elevationSourceType_Terrain需要预设
map.Terrain.SetProperties(elevationSourceType_Terrain, elevationLayerType_normal, false, 1, 0);

4、MAP LAYERS(图层)
Unity 加载 Mapbox 三维图层_第14张图片
TilesetId:自定义
MapFeatures:加载当前tilesetId对应的图层
DataLayer:图层
Filter:添加过滤(显示高度>2米的建筑等)
Modeling:模型设置
PropertyName:属性名称(高度)
Texturing:模型贴图

你可能感兴趣的:(Unity开发记录)