Navigation导航寻路RecastDemo讲解

本文深入探讨了3D游戏中高效寻路解决方案——NavMesh导航网格,对比2D游戏中的A星算法,介绍了RecastNavigation库的使用,包括场景网格生成、寻路算法及参数调整,适合3D游戏开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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功能比较全面,包含了生成导航网格,导航寻路等可视化功能演示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值