利用叉乘计算物体转向

物体A转向物体B时,是从左转,还是从右转呢?可利用叉乘计算。U3d使用左手坐标系。

dirC = Cross(dirA, dirB) = |dirA| * |dirB| * sin;

而根据正弦曲线可知道,夹角在[0,PI]区间内时sin > 0,夹角在[PI,2PI]区间内时sin < 0;

再结合左手法则,通过dirC.Y就知道目标点是在左边还是右边了。


// a的当前朝向
Vector3 vec3Forward = a.transform.TransformDirection(Vector3.forward);

// 目标方向
Vector3 vec3Target = b.transform.transform.position - a.transform.position;

// 计算叉乖
Vector3 vec3Cross = Vector3.Cross( vec3Forward, vec3Target );

// 计算转角
float dAngle = Vector3.Angle( vec3Forward, vec3Target );        // Angle方法始终返回最小角

// 根据左手法则,y向上,说明目标在右边,y向下,说明目标在左边
if( vec3Cross.y > 0 )
{
        // 向右转
        a.transform.Rotate( cube.transform.up, dAngle )
}
else
{
        // 向左转
        a.transform.Rotate( cube.transform.up, -dAngle )
}

你可能感兴趣的:(Unity3D)