比“A星寻路”和“跳点寻路”快很多倍的《RCA寻路》介绍,能解决大地图寻路性能不足的问题

《RCA寻路》数据提前烘焙,可借助我写的地图编辑器烘焙,提前烘焙数据可以减少在线烘焙的耗时,提高玩家的体验。

提前烘焙操作如下

先打开在线地图编辑器
地图编辑器地址
https://easymapeditor-1258223435.cos.ap-guangzhou.myqcloud.com/v2.0.0/web-mobile/index.html

一、点击地图编辑器的设置按钮,打开设置面板。

二、勾选设置界面上的“是否导出RCA烘焙数据”选项框。

三、编辑完地图数据,点击工具栏的“保存”或“另存为”按钮,地图数据文件里就附带有RCA寻路烘焙数据了。

地图数据文件附带烘焙数据会比原文件大,这个由开发者按自己的项目情况选择是否导出烘焙数据,如果不导出烘焙数据,地图框架的RCA寻路组件会在运行时自动烘焙,会耗一些时间。如果读取地图文件的烘焙数据的话会节省很多在线烘焙时间。

6赞

我只能说:精品. 有时间我测试对比一波.

插个眼!!!!

dlnbmark

这个动态添加障碍物,应该会很卡吧?万一路上的障碍物有很多大量动态添加的呢

目前这个版本是对付静态地图,如果地图有障碍变化,需重新全图烘焙(全图烘焙接口已经提供有),会消耗一些时间(不同设备消耗时间不一样),我的pc端测试了一下,对全图40000格子,墙角总数量大概3000。全图烘焙消耗0.7秒,手机端可能消耗时间会更长一些。

后续我会升级寻路组件,让组件支持局部烘焙,即只对新增或减少的墙角与周围其它的墙角进行重新烘焙,计算量少,不会消耗多少时间。局部烘焙的方案我已经想好,还没时间去验证可行性,等验证完成再更新到框架内。

4W的格子是200*200吗,电脑这样就有0.7秒的耗时吗??

不是你理解的这样,烘焙是由两步操作组成:

假设地图里的墙角数量有3000;

1、遍历40000个格子,找出所有的墙角(包括内墙角和外墙角),找出3000个墙角。

2、假设找到的外墙角和内墙角各1500个,接着就是用射线检测1500个外墙角之间哪些是互相关联的,还有检测内墙角可以直达哪些外墙角,把这些关系提前计算出来并存储好。


第1步没多少消耗,主要消耗在第2步。

要遍历并射线检测 接近 1500 * 1500 * 2 次。远超过你预想的 200 * 200次。所以做一次全图烘焙是有点耗时的,不过相对NavMesh(多边形寻路)的烘焙快很多了,所以RCA能支持运行时在线烘焙,比较大的地图可能烘焙1秒,不过对玩家来说是可接受范围。


我的地图编辑器提供有外部烘焙数据导出,游戏初始化是可以不用在线烘焙,读取外部烘焙文件数据可加快地图初始化速度。

强啊,大佬

mark~

mark~ 有时间好好看看 :joy:

贴主,我手搓了一个寻路算法,你那边有地图数据么?能发几个给我么,我测试一下我的算法底线和极限。 多少格子的都来一套更好。

这种时间复杂度算一下就大概知道了吧

对于不同的 Grid PathFinding(2D 网格寻路) 算法的性能比较与基准测试 - Showcase - Cocos中文社区 这个帖子应该有测试数据

我的算法很简单,让我心里没底。 想现实测试一下,万,百万,千万,亿,都想测测

谢谢,我去里面找找看

没有地图数据,找了一遍,没看到有

不是有测试工程吗,拉下来看下就知道了

OK,我去试试

https://easymapeditor-1258223435.cos.ap-guangzhou.myqcloud.com/v2.0.0/web-mobile/index.html

地图编辑器可以编辑你要的数据。

1、点击新建按钮,选一张你电脑上的图片,格子类型选90度角类型(也就是正方形格子),设置格子大小小一点,这样就能创建精度很高的地图了,也就是你要的上百万格子。

2、编辑一下绿色格子,也就是可行走点,没编辑的默认不可行走。

3、编辑完后点击保存或者另存为按钮,就得到一个json数据文件,可以用文本工具打开文件,把里面的二维数组数据复制出来就可以了,数组的元素0代表可走,1代表不可走。你复制数组出来,用来测试你收搓的算法。


地图编辑器默认有一张地图,总格子5000左右,你也可以用默认地图编辑数据测常规地图的寻路效率。