游戏开发常用数学知识:向量

下面的图展示了一个二维向量 v = (x, y)

xyOv = (x, y)x 分量y 分量

向量加法示意图

Startaba + bEnd

点乘用于判断两个方向之间的关系。

Unity 中写法:

float dot = Vector3.Dot(a, b);

如果两个向量都是单位向量,那么点乘结果和夹角有关:

EnemyforwardtoTargetθdot = forward · toTargetdot 越接近 1,目标越靠近正前方

投影可以理解为:

一个向量在另一个方向上占了多少

Unity 中可以使用:

Vector3 projected = Vector3.Project(vector, onNormal);
onNormalvectorprojection投影:vector 在 onNormal 方向上的分量

叉乘在三维空间中常见。

Unity 中写法:

Vector3 cross = Vector3.Cross(a, b);

叉乘的结果是一个新的向量,这个向量垂直于原来的两个向量。

叉乘示意图

Playerforwardtargetleft sideright sideCross 可用于判断目标在角色左侧还是右侧常见 X-Z 平面中通常检查 cross.y

常见 Unity 向量 API

API作用
v.magnitude获取向量长度
v.sqrMagnitude获取向量长度的平方
v.normalized获取归一化后的方向
Vector3.Distance(a, b)获取两点之间的距离
Vector3.Dot(a, b)点乘,判断方向关系
Vector3.Cross(a, b)叉乘,判断垂直方向或左右关系
Vector3.Project(a, b)把向量 a 投影到方向 b 上
Vector3.Lerp(a, b, t)线性插值
Vector3.MoveTowards(a, b, maxDistanceDelta)向目标移动