向量
三维向量即Vector3
Vector3有两种几何意义
1. 位置——代表一个点
this.transform.position
2. 方向——代表一个方向
this.transform.forward this.transform.up
两点决定一个向量
举个例子:
根据A、B两个点来求AB向量
Vector3 A=new Vector3(1,2,3); Vector3 B=new Vector3(5,1,5); Vector3 AB=B - A;
零向量(0,0,0),零向量是唯一一个大小为0的向量
Vector3.zero
负向量(X,Y,Z)的负向量为(-X,-Y,-Z),负向量和原向量大小相等,方向相反
-Vector3.forward
向量的模长
向量的模长就是向量的长度,因为向量由两个点得到的,所以向量的模长就是两个点之间的距离。模长公式为√X²+Y²+Z²,在Unity中,如果我们想要得到向量AB的模长,可以使用AB.magnitude。
单位向量
模长为1的向量就是单位向量,任意一个向量经过归一化就是单位向量。在我们只需要方向,而不想让模长影响计算结果时可以使用单位向量。单位向量=(X/模长,Y/模长,Z/模长),在Unity中,如果我们想要得到单位向量AB的模长,可以使用AB.normalized或AB/AB.magnitude。
点乘计算公式:向量*向量=标量
点乘可以得到一个向量,这个向量就是在自己向量上投影的长度。点乘结果大于0两个向量夹角为锐角;点乘结果等于0两个向量夹角为直角;点乘结果小于0两个向量夹角为钝角。
由此我们可以在制作游戏的时候通过这个规律来判断敌方的大致方位。Vector3提供了计算点乘的方法,举个例子:
Debug.DrawRay(this.transform.position,this.transform.forward,Color.red)
或
Debug.DrawRay(this.transform.position,target.position-this.transform.position,Color.red) //this.transform.forward:自己的面朝向
我们可以通过该代码在Unity中清楚的查看向量的具体方向
那么如何通过点乘推导公式算出夹角呢
首先用单位向量算出点乘结果
dotResult=Vector3.Dot(this.transform.forward,(target.position-this.transform.position).normalized);
然后用反三角函数得出角度并输出它
Print(“角度”+Mathf.Acos(dotResult)*Mathf.Rad2Deg);
或者直接用下列语句输出他
Print(“角度”+Vector3.Angle(this.transform.forward,target.position-this.transform.position));
向量叉乘
Unity提供了比较简单的叉乘计算方式,我们可以使用Vector3.Cross(A.position,B.position)来计算AB的叉乘。我们可以通过向量叉乘得到一个平面的法向量,从而得到两个向量之间的左右位置关系。