寻找目标的标准解决方案是什么?


28

我正在开发类似游戏的2D RTS,基本A *可以完美地将单位从A点移动到B点。

但是现在我遇到了连续的寻路问题,例如A攻击移动的对象B,一旦对象B的位置改变似乎效率低下,则在每一帧调用A *。

那么解决此问题的标准方法是什么?


1
没有标准方法。
Kylotan

3
没有单一的标准方法,但是有很多关于解决问题的常用方法的文献。

Answers:


17

据我所知,您可以看一下D *算法,它代表“动态A *”。该算法用于计算动态环境下的寻路,此处具有移动目标。

这是一篇使用D *进行移动目标路径查找的论文:Moving Target D * Lite


10

一种选择是每隔几帧仅创建一条新路径。如果您每秒执行一次或两次,而不是每秒执行60次以上,那么除非它们都是两个非常快速移动的对象,否则用户不太可能注意到


8

您可以使用“狗曲线”方法,狗在追捕某人时显然会使用它。他们计算出影响点在“将来”的位置,并直接指向该位置。

一个简单的近似方法可能是:

A = NPC

B =目标

T =到达B:s位置的时间(B:s初始位置)

计算B在“ T”时间内的位置(如果B以相同的速度/角度继续行驶),然后转到那里。

随着距离的变化,这并不是一种完美的方法,但是比做出完美的解决方案要简单得多,并且比尝试达到“ B”要好得多。


3
不了解狗。我今天学到一些东西!
SteeveDroz

3

与Kylotan达成共识,认为没有标准方法。

我见过的一种方法是,假设目标在继续执行寻路算法时继续朝同一方向移动并更改目标位置。这确实意味着您必须在A *节点中保存两个指标(成本和时间而不是成本)。

要做到这一点是非常困难的。除非您真正了解目标的坚定路线,否则您将进入相当困难的AI领域,因为您将需要AI进行第二次猜测或模拟目标行为,以便猜测目标的位置和走向。这种AI是基于游戏理论的实时AB游戏,在任何3D游戏AI工具包中都不是标准领域。


2

动态路径查找的一种方法是让实体预测目标要去的位置并到达那里。

一种实现方法是使用泰勒级数。

我将目标随时间的路径称为函数S(t),其中S是位置,t是当前时间,路径的近似值是A(f),f是未来的日期,近似值。

那么最简单最愚蠢的近似是A(f)= 0。

下一个最简单的是A(f)= S(t),其中t是当前时间,f是未来时间。这是在预测目标只是停在原地。

最简单的第三种是A(f)= S'(t)* f + S(t),其中S'是S相对于时间的导数。这预示着目标将以恒定的速度继续前进而不会加速。

第四个最简单的是A(f)= S''(t)* f ^ 2/2 + S'(t)* f + S(t)。这可以预测目标像落球一样以恒定的速度加速。

我知道这可以用时间变化来改写,这对于游戏来说可能更方便。现在S可以是任何东西。它可以是X坐标,可以是Y坐标,可以是对象之间的距离,也可以是角度。另外,还有可能更好的方法来预测对象的未来路径,因此我会四处看看。


1

如果地形是相当开放的,并且目标距离追踪器不太远,则可以使用拦截转向行为。本质上,您可以利用目标的位置和速度来计算目标前方的距离,该位置不要太远,也不要太近,然后将追随者引向该点(每隔一定的时间间隔计算一次)。

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.