【发布时间】:2022-11-17 03:06:55
【问题描述】:
在构建大型地图 RTS 游戏时,我的团队在寻路方面遇到了一些性能问题。
A* 显然效率低下,这不仅是因为寻找路径的问题,而且是因为大量单元同时移动的处理成本。
经过研究,显而易见的解决方案是使用 FlowField 寻路,这是目前 RTS 游戏的行业标准。
在创建基本算法后,我们现在遇到的问题是地图非常大,需要大约 766 x 485 的网格。这会在计算要遵循的单元的流场时造成明显的处理冻结或滞后。
有没有人以前经历过这种情况或有任何关于如何使流场更有效率的解决方案?我尝试了以下方法:
- 在创建列表时将流场添加到列表并稍后引用(一旦创建就可以工作,但明显滞后于创建。)
- 在游戏开始前处理流场并引用列表(由于单元格数量巨大,这根本行不通。)
- 根据最远的选定单位和目的地点之间的距离创建网格(适用于短距离,如果从地图的一端移动到另一端则无效)。
我正在考虑将地图拆分成多个流场,但我正在尝试弄清楚如何让它们从一个场移动到另一个场。
对此有何建议?
提前致谢!
【问题讨论】:
-
FlowField 的网格很大。也许您可以将 HPA*(分层寻路 A*)的思想应用于 FlowField 算法。通常,游戏倾向于生成相对较小的(可到达)区域的(静态)图(细化技术用于使路径短而平滑)。这对于开放地图(即没有很多复杂的障碍)特别有用。事实上,这与 HPA* 所做的非常接近。请注意,对于此类问题,您肯定会在 gamedev.stackexchange.com 上获得更多关注。
标签: algorithm performance unity3d game-physics path-finding