我的游戏有玩家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做些什么,但不确定究竟是什么。
答案 0 :(得分:2)
因此,我们需要决定使用哪些指标/启发式方法来确定哪个玩家可以瞄准。
除非您的游戏平台是2D(例如Space Invaders或Thing-Thing)或伪3D(例如Doom或Wolfenstein 3D),否则您还需要考虑目标的提升(你真的不想跳跃)对于视锥体上方或下方的某个看不见的玩家。
您可以应用的另一个此类指标是点积:计算您的视图/目标方向与从您到每个敌方玩家的向量之间的点积。如果这接近1那么你就是在玩家附近瞄准,如果不是那么。
要决定两个玩家之间的拍摄,我们可以计算他们的点积指标之间的百分比差异。我们还可以计算它们的距离之间的百分比差异。比较这两个百分比差异,对于更大的差异,选择相应指标更大的播放器。
我们可以采取的更高级程序来改善现实主义,包括: