简单介绍一下点乘跟叉乘的几何运算和它们在unity里的常用方法
点乘 :Dot(A,B)=|A|*|B|*cos(AB)
cos(AB)代表A向量跟B向量的夹角的cos值
|A|、|B|分别代表两个向量的长度
点乘常用来判断目标在角色的前方还是后方,举个例子:
目标的位置为 target.position 角色的位置为 transform.position
角色到目标的方向:
dir=(target.position-transform.position).normalized //这里用了归一化,方便计算
点乘的结果:
result=Vector3.Dot(transform.forward,dir)//角色的朝向跟角色到目标的方向
如何通过result来判断方向:
result>0 :目标在角色前方(夹角 <90°)
result<0 :目标在角色后方(夹角 >90°)
result=0 :目标在正侧方(夹角=90°)
叉乘:Cross(A,B)=A*B=|A|*|B|*sin(AB)
sin(AB)代表A向量跟B向量的夹角的sin值
又乘生成一个垂直于两向量的新向量
叉乘的结果:
crossResult=Vector3.Cross(transform.forward,dir)
如何通过crossResult来判断方向:
crossResult.y>0:目标在角色左侧
crossResult.y<0:目标在角色右侧
crossResult=Vector3.zero两向量共线(正前或正后)
通过点乘跟叉乘可以获取目标在角色的具体方位,左前、左后、右前、右后等