Unity判断向量夹角和看向物体

在进行学习时,我学了一堆api,经常容易搞混,具体怎么用经常混乱,于是记录一下,如何判断向量夹角。


>一,Vector3.dot(比较麻烦,一般不太推荐)

1
float angle = Mathf.Acos(Vector3.Dot(transform.forward, target.position - transform.position)) * Mathf.Rad2Deg;

通过Vector3.dot,传入两个向量作为参数,会得到点乘结果,将点乘结果用反三角函数求出弧度值,再转化为角度值。

二,Vector3.Angle (最推荐)

1
float angle = Vector3.Angle(transform.forward, (target.position - transform.position).normalized);

直接传入两个向量,自己判断角度值,挺推荐的。

三,Quaternion.Angle

1
float angle = Quaternion.Angle(transform.rotation, target.rotation);

如果你有目标物体的旋转(Quaternion),你可以使用Quaternion.Angle来计算两个旋转之间的夹角:

四,叉乘(不太推荐)

1
2
Vector3 cross = Vector3.Cross(transform.forward, target.position - transform.position);
float angle = Mathf.Acos(Vector3.Dot(transform.forward, target.position - transform.position) / (transform.forward.magnitude * (target.position - transform.position).magnitude)) * Mathf.Rad2Deg;

此外还可以通过射线检测等方法获取夹角,最推荐Vector3.Angle


然后是看向物体,主要两个API,一个是Transform.LookAt;一个是Quaternion.LookRotation;一个是Vector3.RotateTowards,这个方法可以将当前物体的一个向量旋转到目标物体的方向。