表示3D向量和点,3个分量分别为 x,y,z
定义了常用的向量:
静态常量 | 值 |
---|---|
back | 0,0,-1 |
forward | 0,0,1 |
left | -1,0,0 |
right | 1,0,0 |
up | 0,1,0 |
down | 0,-1,0 |
one | 1,1,1 |
zero | 0,0,0 |
negativeInfinity | float.NegativeInfinity,float.NegativeInfinity,float.NegativeInfinity 负无穷大 |
positiveInfinity | float.PositiveInfinity,float.PositiveInfinity,float.PositiveInfinity 正无穷大 |
属性
属性 | 含义 |
---|---|
magnitude | 向量长度,只读 |
sqrMagnitude | 长度的平方,只读 |
normalized | 长度为1的单位向量,只读 |
向量的数学运算,大多数作为静态方法定义的
方法 | 功能 |
---|---|
Angle | float Angle(Vector3 from, Vector3 to); 计算两个向量之间的角度 |
SignedAngle | float SignedAngle(Vector3 from, Vector3 to, Vector3 axis); 两个向量之间的有符号角度。值域为-180到180度。from-to顺时针为正,逆时针为负。3D向量的方向是任意的,所以需要指定旋转轴来确定角度符号,根据叉乘向量和旋转轴的角度确定符号,大于90度说明反了。计算方法: Vector3 cross = Vector3.Cross(from,to); float sign = Mathf.Sign(90 - Vector3.Angle(cross,axis)); |
ClampMagnitude | Vector3 ClampMagnitude(Vector3 vector, float maxLength); 返回限定最大长度的向量,如果超过maxLength,返回maxLength |
Cross | Vector3 Cross(Vector3 lhs, Vector3 rhs); 向量叉乘,返回垂直于lhs和rhs的向量 |
Distance | float Distance(Vector3 a, Vector3 b);返回两个向量的距离 |
Dot | float Dot(Vector3 lhs, Vector3 rhs); 向量点乘。如果rhs是单位向量,则返回结果是lhs在rhs投影的向量的长度。 |
Lerp | Vector3 Lerp(Vector3 a, Vector3 b, float t); 2个点线性插值,t>1时,t=1 |
LerpUnclamped | Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t); 2个向量线性插值。如果t>1,则继续向a->b的方向插值 |
Slerp | Vector3 Slerp(Vector3 a, Vector3 b, float t); 球面插值,可以处理方向插值 |
SlerpUnclamped | Vector3 SlerpUnclamped(Vector3 a, Vector3 b, float t); 球面插值,同上,只是允许t>1,且有效 |
Max | public static Vector3 Max(Vector3 lhs, Vector3 rhs); 返回2个向量中较大的那个 |
Min | public static Vector3 Min(Vector3 lhs, Vector3 rhs); 返回2个向量中较小的那个 |
MoveTowards | Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta); 从current移动到target,每次调用,移动距离不超过maxDistanceDelta。 |
Normalize | Vector3 Normalize(Vector3 value); 向量单位化,并返回单位化后的向量 |
OrthoNormalize | void OrthoNormalize(ref Vector3 normal, ref Vector3 tangent); 将2个向量单位化,并且正交(夹角90度) |
Project | Vector3 Project(Vector3 vector, Vector3 onNormal); 求vector投影到onNormal的向量 |
ProjectOnPlane | Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal); 将向量投影到planeNormal作为面法线的平面上 |
Reflect | Vector3 Reflect(Vector3 inDirection, Vector3 inNormal); 根据入射向量和给定的法线,计算反射向量 |
RotateTowards | Vector3 RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta); 基本功能同Slerp,但是插值过程中,角度变化和长度变化不会超过maxRadiansDelta和maxMagnituedDelta |
Scale | Vector3 Scale(Vector3 a, Vector3 b); 向量分量分别相乘,也可以理解为用b对a 进行缩放 |