瞄准辅助——我如何选择要瞄准哪个玩家?

Aim Assistance- how can I pick which player to aim at?

我的游戏有玩家 x、y、z 坐标,以及我的玩家摄像机偏航(只有偏航,没有滚动或俯仰),以及敌人的 x、y、z 坐标列表。我想实现瞄准辅助,但我在想出算法时遇到了问题。

我完全不知道该怎么做。找到最近的敌方玩家很容易,但是如果玩家想瞄准比最近的敌方玩家更远一点的人并且将他们的目标指向该玩家非常近怎么办?我必须以某种方式对偏航差异做些什么,但我不确定该怎么做

到目前为止我所拥有的伪代码:

EnemyList[Enemy1, Enemy2, Enemy3, Enemy4, Enemy5];
Player;

nearestEnemy = Player.FindNearestEnemy(EnemyList);
// in degrees, the "difference" in yaw between the players current aim and the aim they'd need to target the player
yawDiff = Player.YawDiff(nearestEnemy);

if Player.InRange(nearestEnemy) {
    Player.Aim(nearestEnemy);
}

我想我需要用 yawDiff 做点什么,但不确定具体是什么。

所以我们需要决定使用哪个 metrics/heuristics 来确定瞄准哪个玩家。

除非您的游戏平台是 2D(例如 Space Invaders 或 Thing-Thing)或伪 3D(例如 Doom 或 Wolfenstein 3D),否则您还需要考虑瞄准的高度(您不真的很想跳到视锥上方或下方的某个隐形玩家。

您可以应用的另一个此类指标是点积:计算您的视线/瞄准方向与从您到每个敌方玩家的矢量之间的点积。如果这接近 1,那么你的目标就在玩家附近,如果不是,那就不是。

要决定在两名球员之间投篮,我们可以计算他们的点积指标之间的百分比差异。我们还可以计算它们的距离之间的百分比差异。比较这两个百分比差异,对于更大的差异,select对应指标更大的玩家。

我们可以做的更高级的程序来提高真实感包括:

  • 精度/火力的距离衰减 - 这是现实生活中非常重要的考虑因素,因此您可以考虑将其添加为一个指标。
  • 投影大小:距离您较近的玩家显然会投射更大的目标。因此,即使距离较近的玩家的点积指标较小,考虑到这一点,由于他的表观尺寸相对较大,瞄准他可能会更有利。