2016-08-02 22 views
1

我的游戏拥有玩家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 ,我想,但不知道究竟是什么。

回答

2

所以我们需要决定使用哪些指标/启发式来确定哪个玩家要瞄准。除非你的游戏平台是2D(例如太空侵略者或物品)或伪3D(例如Doom或Wolfenstein 3D),否则你需要考虑你的目标的提升(你并不是真的想要跳到一些看不见的球员上方或下方视角)。

您可以应用的另一个此类指标是点积:计算您的视图/目标方向与从您到每个敌方玩家的向量之间的点积。如果这个数字接近1,那么你的目标是靠近玩家,如果不是的话。

要决定两名玩家的投篮命中率,我们可以计算他们的点积指标之间的百分比差异。我们也可以计算它们的距离之间的百分比差异。比较这两个百分比差异,对于比较大的一个,选择相应度量值较大的玩家。

更先进的程序,我们可以做些什么来改善真实感包括:准确度/火力

  • 距离衰减 - 这是在现实生活中一个非常重要的考虑因素,所以你可以考虑将此作为一个度量。
  • 投影尺寸:接近你的玩家显然会制造更大的目标。因此,即使更接近球员的点积指标较小,考虑到这一点,由于其比较明显的尺寸,瞄准他可能更有利。