利用叉乘计算物体转向

物体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 )
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值