3D游戏中如何判断人物A是否朝向人物B?

提问:什么是Yaw?
回答:人物是站在X、Z构成的地面上,头顶方向为Y轴正向。Yaw是Y轴向X、Z面投影的极坐标表示,值域为[-pi, +pi]。

通过A与B的位置做向量差可以得到A指向B的向量:
Vector A_B = B.pos – A.pos

则A指向B的向量的Yaw为:
A_B_Yaw = A_B.x / A_B.z

A_B_Yaw = math.atan2(A_B.x, A_B.z)
A_B_Yaw的值域为(-pi, +pi]。

人物具有一个Yaw值属性,表示人物在3D世界中的朝向。A的朝向与"A指向B的向量的Yaw"的夹角为:
AYaw_ABYaw_InAngle = math.fabs(A_B_Yaw – A_Yaw)
AYaw_ABYaw_InAngle的值域为[0, 2pi]。
从该夹角的角度可以知道人物A是否朝向人物B。
 

你可能感兴趣的:(代码)