设为首页收藏本站

微软Hololens全息现实网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

一键登录:

查看: 866|回复: 1

Unity如何利用Mapbox在游戏中实现真实地图?

[复制链接]
发表于 2017-7-10 16:09:47 | 显示全部楼层 |阅读模式

说到游戏中的真实地图,大家脑海中浮现的第一款游戏应该都是火爆全球的AR游戏《Pokémon Go》吧。今天这篇教程将为大家介绍Mapbox Unity SDK,能够在游戏中获取真实的世界地图,或是根据真实地图生成游戏中的体素世界。这些地图数据可以预先存储在游戏或应用中,也可以在运行时动态生成。 设置帐号访...

说到游戏中的真实地图,大家脑海中浮现的第一款游戏应该都是火爆全球的AR游戏《Pokémon Go》吧。今天这篇教程将为大家介绍Mapbox Unity SDK,能够在游戏中获取真实的世界地图,或是根据真实地图生成游戏中的体素世界。这些地图数据可以预先存储在游戏或应用中,也可以在运行时动态生成。


设置帐号访问Mapbox官网下载Mapbox Unity SDK,然后将下载的.assetpackage文件导入项目。在使用Mapbox插件之前,需要先在Mapbox官网申请API Key。创建Mapbox帐号后,打开API acess tokens页面,新建一个token。



ee8cb10c672d96bef3cee8c84932b3b8.jpg


然后在Unity编辑器中依次点击菜单项Mapbox - Configure Access打开Mapbox界面:



a411bd32c6107a139eb0ed1e5780e791.jpg


输入Access Token:


c0fd1ef789ae2ba20a75bd1900a8362a.jpg


如果Token生效,编辑器会出现如上图的“TokenValid”提示。

示例场景Mapbox插件提供了大量示例场景,其中最简单的示例场景Slippy,也是游戏项目较为常用的功能案例。它展示了地图从选中的某点开始不断向外延伸,根据视野范围的变化来实时加载新的地形,这也是游戏中追踪某个对象的真实地理位置时常用的功能。



a9207f902147ea948bd5f9c6d3e1a6d3.gif


此示例使用了3D网格,与Unity自带的3D地形无异。场景中的Map游戏对象带有Abstract Map脚本,可以在此脚本中设置地形的起始位置的经纬度与延展范围。


54324c6e5ee89044e70a980e76120861.jpg


Abstract Map脚本的Map Visualization字段用于定义地图外观。Mapbox插件已经提供了一些不同的视觉效果,但您也可以选择自定义或重新创建地形。


8c5576c33e26fd9d398058cf2f5616d9.jpg


将Map Visualization字段设为PoiDemoVisualization,并将起始位置改为上海,效果如下:



351cda5305bfad57c2b142ac0d41bb0c.gif


如果想生成《我的世界》那样的体素地图,可以打开VoxelWorld场景看看其设置。效果如下:



aa7c1cf6e9cb7a9cb990f7d749f093c0.jpg


自定义地图除了Mapbox提供的示例地图外观,还可以自定义想显示的地图信息。下面就为大家介绍自定义地图的步骤。


首先,新建文件夹“CityMap”,然后在项目视图选中该文件夹后单击右键,依次选择Create - Mapbox - MapVisualization新建可编程对象MapVisualizer,该对象将用作地图的根节点,来承载所有的地图层次。



191a7b038b75044e5ee739a68b0be29b.jpg


然后创建Terrain Factory,在“CityMap”目录下新建文件夹“CityTerrain”,然后在项目视图选中该文件夹后单击右键,依次选择Create - Mapbox - Factories - Terrain Factory新建可编程对象CityTerrain:



e358aab0934d6360aa86db54c069bf29.jpg


在检视面板中选中CityMap对象,添加CityTerrain为其第一个Factory。



32c79563f7f8803a1548041b9f6c1a90.png


可以在CityTerrain对象中设置高度缩放值,来改变建筑所显示的高度比例。



64ce8aae6ac8f69ff0e1db07445c5531.png


温馨提示:如果不希望地图出现高光,可以新建材质后将其Smoothness改为0 ,然后替代CityTerrain对象所使用的材质。


下面创建Map Image Factory。在“CityMap”目录下新建文件夹“CityImagery”,然后在项目视图选中该文件夹后单击右键,依次选择Create - Mapbox - Factories - Map Image Factory新建可编程对象 CityImagery。



5cd3826938dd333de6a498594c8883d3.jpg


选中CityImagery对象,将其Style设为Dark。



cf608784784e0b74d468019d8890a557.png


然后选中CityMap对象,将CityImagery添加为其第二个Factory。



9c6f5a031bd8cf9d17fc1a9e7c200667.png


新建场景后创建游戏对象Map,并为其绑定AbstractMap脚本。



2fd4c59309d9e2491b34562f31bb1af3.png


将脚本的MapVisualizer属性设为CityMap,Zoom设为16。然后为Map对象添加RangeTileProvider脚本,将其范围设为(1, 1, 1, 1),并将RangeTileProvider脚本赋给AbstractMap的Tile Provider字段。如下:



f0374bb387bac84e841527d527f0802b.png


其中Range表示以设置的经纬度为中心,Mapbox向中心的4个方向所生成的地块数量,默认为0。到此一个最简单的自定义地图就完成了,点击运行可以看到生成的地图外观如下:



8534949e8739675c39bf7dc18ba5693d.jpg


还可以在此基础上添加更多层,来放置3D建筑、道路纹理等内容。


总结

关于在Unity中通过Mapbox来为游戏添加真实世界地图的内容就分享到这里,本文仅简单介绍了Mapbox Unity SDK的一小部分功能,感兴趣的朋友可以去下载试用并更深入地探索。


论坛(HoloLens全息现实网): http://hololens8.cn

VR/AR/HoloLens开发者QQ群:220104582
VR/AR资源分享QQ群:281921834
HoloLens/VR/AR交流QQ群:433190386


转自:http://mp.weixin.qq.com/s?__biz= ... SPfvH0m9Q7HjPoko#rd




上一篇:Unite 2017 | Unity中的异步编程技术详解(附演讲视频)
下一篇:Unite 2017 | Unity中可用于VR环境的空间化音效
发表于 2017-7-10 16:28:36 | 显示全部楼层
小伙伴们快来围观。。。
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

注册验证邮件查收提醒:

由于各大邮箱政策原因,

如果没收到邮件提醒,

您的注册验证邮件可能

被投送到您邮箱的垃圾箱,

请注意查收验证哦


QQ|小黑屋|Hololens全息现实网 ( 京ICP备15026232号   点击这里给我发消息

GMT+8, 2018-9-25 18:55 , Processed in 0.552090 second(s), 30 queries .

Powered by Hololens全息现实网 X3.2

© 2001-2017 Hololens全息现实网

快速回复 返回顶部 返回列表