Unity 用InverseTransformPoint方法计算两点之间的夹角

来源:互联网 发布:平板电脑js加载错误 编辑:程序博客网 时间:2024/05/16 04:23

求两点的夹角方式很多,这里记录下用InverseTransformPoint的方法求两个点夹角的方法。

首先Vector3 relative = A.transform.InverseTransformPoint(B.transform.position) 是用来计算B相对于A坐标系下的坐标(相当于向量B-向量A?  其实不是,因为这个方法受到A缩放值的影响,如果A的缩放是1,那结果就是向量B减去向量A的差值)。

了解这个方法之后,可以通过反正切的方法计算两点夹角:mathf.atan2(y,x),这个方法返回【-pi,pi】比math.atan()方法稳定。

图画的很low,能看懂就行


得到这个角度为float angle = Mathf.atan2(relative.z,relative.x) * Mathf.Rad2Deg;

A到B需要旋转的角度即为angle,Unity宝典中就是这个例子。


实际用的时候遇到了一个很简单的问题:我想让A围绕一个轴旋转到B

A.transform.RotateAround(B.transform.position,Vector3.up,angle);

发现A没有朝向B,其实原因很简单,就是A自身也是有旋转的,A起始状态就是在y轴有270度的旋转,只要加上这个角度即可。

float eulerAngleY = A.transform.eulerAngles.y;

A.transform.RotateAround(B.transform.position,Vector3.up,angle+eulerAngleY);

原创粉丝点击