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

发表于2019-01-18
评论0 4.8k浏览
求两点的夹角方式很多,这里记录下用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);

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签:

0个评论