前言
项目中经常会遇到两个对象的夹角计算,主要还是vector3.Angle的计算,有个问题是这个返回只在180之下。通过一番查阅资料这里将整理的demo分享一下。
直观效果
实现过程
搭建场景
对象
新建了两个对象,一个正方体和一个球体,主要就是计算正方体前向和正方体到球体方向的夹角。
TextMesh用于显示计算的夹角值。
划线对象
为了更直观的看到夹角,用两根线来连接出夹角。
编码
获取夹角
求出两个向量的角度
float angle = Vector3.Angle(from, to);
from正方体的前向
to 正方体到球体的向量
转换夹角值
叉乘求法线向量
Vector3 nordir = Vector3.Cross(from, to);
点乘求出相似度
float dot = Vector3.Dot(nordir, Vector3.down);
转换值
if (dot < 0)
{
angle *= -1;
angle += 360;
}
显示夹角
angleText.text = angle.ToString("F3");
绘制夹角
SetPosition(0, transform.position);
SetPosition(0, transform.position);
SetPosition(1, transform.forward*5);
SetPosition(1, OtherObj.position);