我们有一个目标,它位于关卡的某个地方,还有一个可以四处移动并可以瞄准任何地方的玩家。现在我们要计算玩家 AIM 和 TARGET 之间的距离。
玩家的目标距离目标有多远?- 如果该值接近“0”,我们知道玩家正在瞄准目标。我们想知道这一点,因为我们喜欢计算玩家开枪时离他们有多远。
以下信息是我们所拥有的:
- 目标向量(X,Y,Z)位置/坐标。
- 玩家向量(X,Y,Z)位置/坐标。
- 球员俯仰和偏航。
我们有一个目标,它位于关卡的某个地方,还有一个可以四处移动并可以瞄准任何地方的玩家。现在我们要计算玩家 AIM 和 TARGET 之间的距离。
玩家的目标距离目标有多远?- 如果该值接近“0”,我们知道玩家正在瞄准目标。我们想知道这一点,因为我们喜欢计算玩家开枪时离他们有多远。
以下信息是我们所拥有的:
因此,您将距离定义为空间中的目标点与瞄准线之间的距离。请注意,您还可以将距离定义为连接玩家和目标的线与瞄准线之间的角度。
幸运的是,这很容易:
点 b 是 到直线 的前视点Target
投影aim
:
t = Target - Player
i = max(a*t/a*a, 0) (so we won't report false distances when the target is behind)
B = Player + a * i
distance = dist(B, Target) = len(B - Target)
a
您可以使用以下公式从俯仰和偏航计算矢量:
a_x = cos(pitch) * cos(yaw)
a_y = sin(pitch)
a_z = cos(pitch) * sin(yaw)