物体A转向物体B时,是从左转,还是从右转呢?可利用叉乘计算。U3d使用左手坐标系。
dirC = Cross(dirA, dirB) = |dirA| * |dirB| * sin<dirA, dirB>;
而根据正弦曲线可知道,夹角在[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 )
}