2016-08-02 61 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,那麼你的目標是靠近玩家,如果不是的話。

要決定兩名玩家的投籃命中率,我們可以計算他們的點積指標之間的百分比差異。我們也可以計算它們的距離之間的百分比差異。比較這兩個百分比差異,對於比較大的一個,選擇相應度量值較大的玩家。

更先進的程序,我們可以做些什麼來改善真實感包括:準確度/火力

  • 距離衰減 - 這是在現實生活中一個非常重要的考慮因素,所以你可以考慮將此作爲一個度量。
  • 投影尺寸:接近你的玩家顯然會製造更大的目標。因此,即使更接近球員的點積指標較小,考慮到這一點,由於其比較明顯的尺寸,瞄準他可能更有利。