在2D游戏中,我们常常使用A星算法,基于方形网格进行寻路。
(图:2D游戏中的A星寻路)
但是在3D游戏中,场景巨大,2D的方形网格寻路虽然可用,但效率极低。
这时候,用NavMesh导航网格寻路是最佳的解决方案。
(图:unity3d中的寻航寻路网格)
在unity3d中的导航寻路组件Navigation,可以根据3D场景生成用于寻路的导航网格NavMesh。
本文介绍寻路功能的主角:Recast Navigation。
该库使用十分广泛,基于C++语言编写。Unity引擎官方的寻路,unreal的UDK的寻路均基于它开发的。
这个库目前也是开源的。
下载到本地,我们主要看一下它的RecastDemo示例。编译后运行生成的RecastDemo.exe界面如下:
目录
这个库Recast Navigation主要包含两大部份。
第一部分是Recast
第二部分是Detour
(1)Rasterization:用于设定体素的尺寸。
(2)Agent:用于虚拟角色的设置。
(3)其余参数如下:
这个库Recast Navigation主要包含两大部份。
第一部分是Recast
主要功能是将场景网格模型生成用于寻路的网格模型(Navigation Mesh)。
第二部分是Detour
主要功能是利用上一步所生成的Navigation Mesh进行寻路,其包含了多种寻路算法。
运行RecastDemo.exe , 看看它的右边的菜单,有哪些功能,我使用中文进行了标注。
(1)Rasterization:用于设定体素的尺寸。
- cellSize:较小的值能够产生更加精确接近原始集合图形的网格,减少在生成导航网格过程中生成多边形产生较大偏离度的问题,但是会消耗更加多的处理时间和内存占用。
- cellHeight:较低的值并不会对内存消耗产生有显著影响,较低的值虽然能够使网格贴合原始图形,但是如果是凹凸不平的地形,较低的值可能会造成邻接的网格之间产生断裂,导致本来应该连在一起的网格造成分离。设置较高时,可以看到网格和原始图形间距较大。
(2)Agent:用于虚拟角色的设置。
- Height: 角色的身高。
- Radius:角色的半径。
- Max Climb:描述成生活中爬楼梯时,每个台阶的高度。
- Max Slope:描述成生活中爬坡的坡度,以角度值进行设置。
在新版本的unity3d的导航bake界面,画出了一张这样的图,进行了详细的表述。
(3)其余参数如下:
Watershed :分水岭算法,最经典、效果最好,但处理比较慢,一般用于离线处理。
Monotone :最快且可以保证生成的是不重叠、没有洞的 Region,但是生成的 Region 可能会又细又长,效果不好。
Layer:速度、效果都介乎分水岭算法和 Monotone partioning 之间,比较依赖于初始数据。
导航网格NavMesh生成算法比较复杂,建议直接使用这个库可以解决大多数3D场景项目需求。
官方自带的这个RecastDemo功能比较全面,包含了生成导航网格,导航寻路等可视化功能演示。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net