在游戏开发中,我们用向量(Vector)去定义网格方向和其他一些方面的计算
向量 是由两个点所构成的一条直线
向量的长度也称之为向量的大小(模)(Magnitude)
我们先从2D向量开始讨论
2D向量是基于某个初始点开始,图中的初始点是(0,0)点,指向图中任何一点的一条直线
由于它是从初始点开始的一条直线,所以向量还是有方向的
向量Vector2由两个分量组成,分别是X和Y
分量的X和Y表示了这个点距离原点(0,0) X轴 Y轴的距离
而向量的终点(12,6)与原点(0,0)的距离,就是向量的大小(Magnitude)
用勾股定理可求得,图示的向量大小为13
介绍完了向量的基本属性,接下来我们来看看向量的一些基本运算
假设上图中的向量BA是一个人从原点沿直线跑到A点,到达A点后他挠了挠头发现跑错了方向,距离终点还有一段距离,于是他又从点A朝着终点E跑去.
这个时候我们能够发现,无论是走A点绕路到E点,还是走B点直接到E点,他们的终点都是E点
此时这个坐标轴上存在3条向量分别是向量BA,AE,BE.我们通过计算可以发现向量BA的向量AE的分
量相加等于向量BE的分量,这其实就是向量的加法
向量的减法也是如此
在游戏开发中我们通常用来预测目标的方向
点积和叉积
点积(Dot Product): 点积是两个向量之间的一种运算,也称为数量积。它的结果是一个标量(即单个的数值)。点积可以通过将两个向量的对应分量相乘,然后将乘积相加而得到。如果有两个向量 A 和 B,则它们的点积可以表示为:A · B = Ax * Bx + Ay * By + Az * Bz,其中 Ax、Ay、Az 和 Bx、By、Bz 分别是向量 A 和 B 的 x、y、z 分量。点积有许多用途,例如计算两个向量之间的夹角、投影等。在unity中我们可以使用向量的点积来计算自身与目标位置的角度,具体代码演示如下:
向量的点乘还可以用来判断目标是否在角色的前方,(0,1)则在前方,(-1,0)则在身后
当我们谈到向量时,点积和叉积是两个常见的运算。
叉积(Cross Product): 叉积是两个向量之间的另一种运算,也称为向量积。它的结果是一个新的向量,垂直于原始两个向量所在的平面。具体来说,如果有两个向量 A 和 B,则它们的叉积可以表示为:A × B = (Ay * Bz - Az * By) * i + (Az * Bx - Ax * Bz) * j + (Ax * By - Ay * Bx) * k,其中 i、j、k 分别是 x、y、z 轴的单位向量。叉积的结果是一个新的向量,其方向由右手法则确定。叉积也有许多应用,例如计算平面的法向量、判断两个向量之间的方向关系等。