如何让AI代理沿着曲线移动?


12

目前,我非常基本的AI框架中的代理沿着由一系列点组成的锯齿状路径移动。

导航路径

他们只需将位置从一个点移动到另一个点即可。当他们到达下一个点时,他们会前进到下一个,依此类推。如何更改此设置,以便它们沿着路径的弯曲版本平滑移动,以及如何生成曲线?


他们如何选择下一点?
FxIII

@FxIII对不起,我之前没有看到此评论-您是说他们如何选择新的搜索目标,或者他们如何选择搜索的下一个点?
SirYakalot

Answers:


4

您正在进行某种路径平滑处理。当然,正如bummzack指出的那样,您还想确保执行的任何平滑路径都会导致代理商的法律行动。

Gamasutra的这篇文章介绍了您需要了解的几乎所有内容,包括路径平滑,合法转弯以及逼真的平滑转弯算法。

另一种更简单的选择是,使用带有较小边界圆/球的Seek行为来检查代理是否在路径中的下一个点处或附近。


7

由于您已经知道控制点,因此只需更新插值代码即可使用曲率算法(例如,赫姆特或余弦)。

这些网站提供了很好的解释和示例代码,可以帮助您入门:

保罗·伯克插值方法

Sol :: Tutorials-插值技巧


好吧,如果生成的曲线突然撞到障碍处怎么办?
bummzack 2011年

这仅用于代理每帧的移动。相同的碰撞检测算法仍然适用。当检测到碰撞时,要么更改控制点以避免物体(困难),要么临时开始使用其他运动算法。
Doug.McFarlane 2011年

@bummzack很好,答案是使用导航网格并相应地平滑曲线,但是现在我将使用简单的导航图进行处理,因此我将仅通过平滑来解决此问题。路径有点。
SirYakalot

@bummzack:在弯曲路径生成算法的基础上添加一些转向行为,以避开障碍物。
imre

0

我将在这里提出建议,而不是预先生成曲线,而要逐帧处理它,例如使用与创建归位相同的逻辑导弹

这将更容易,并且可能更现实,因为当两点之间有墙时,您不需要特殊情况-您只需照常处理碰撞检测即可。

不利的一面是,该运动将看起来不太理想。对象将始终以最直接的路径从一个航点到下一个,意义,不像一花,他不会开始转动航点3,直到他已年过航点2.根据您的情况,这可能会或可能不会可以通过调整航路点来修复(如果有问题的话)。


1
这实际上是我建议的Seek行为。
Ray Dey

0

路径查找器应为您提供路径,并且您不应修改该路径。我相信,可以修改路径查找器算法,以考虑到陡峭转弯的路径比平滑转弯的路径更糟,因为长路径和短路径已经存在这种情况。

如果可以抽出一点时间思考一下,我将在此处发布一些解决方案,但是我认为这是要走的路。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.