文章目录
Vector3
Vector3类是Unity常用类之一,通常用来表示3D向量和点,有时也可以用来表示欧拉旋转。Vector3使用给定的 x、y、z 分量创建新向量。
构造函数
public Vector3 (float x, float y, float z);
静态变量
Vector3提供了一些静态变量,方便使用常用的方向,例如Vector3.up代表了Vector3(0, 1, 0)。
变量
变量名 | 作用 |
---|---|
magnitude | 返回该向量的长度。(只读) |
normalized | 返回 magnitude 为 1 时的该向量。(只读) |
sqrMagnitude | 返回该向量的平方长度。(只读) |
this[int] | 分别使用 [0]、[1]、[2] 访问 x、y、z 分量。 |
x | 向量的 X 分量。 |
y | 向量的 Y 分量。 |
z | 向量的 Z 分量。 |
运算符
常用方法(静态)
函数名 | 作用 |
---|---|
Angle | 返回 from 与 to 之间的角度 ( ± 180 ° ) (\pm180°) (±180°),以点乘方式计算。 |
ClampMagnitude | 返回 vector 的副本,其大小被限制为 /maxLength/。 |
Cross | 返回两个向量的叉积。 |
Normalize | 使该向量的长度变为 1。 |
Project | 向一条线做投影,将向量投影到另一个向量上。 |
ProjectOnPlane | 向一个平面做投影,将向量投影到由法线定义的平面上(法线与该平面正交)。第二个参数为垂直于要投影的面的向量 |
Dot | 两个向量的点积。 |
Lerp | 在两个点之间进行线性插值。 |
OrthoNormalize | 将向量标准化并使它们彼此正交。 |
Reflect | 从法线定义的平面反射一个向量。 |
MoveTowards | 匀速移动。计算 current 指定的点与 target 指定的点之间的位置,移动距离不超过 maxDistanceDelta 指定的距离。 |
OrthoNormalize(正交标准化)
OrthoNormalize (ref Vector3 normal, ref Vector3 tangent, ref Vector3 binormal);
标准化 tangent 并确保其与 normal 正交,binormal 为副向量。
空间中的点通常使用xyz轴系的坐标指定。但如果有任意三个向量为标准化向量(大小为1),且彼此正交(互相垂直),他们就可以被认定为轴。
正交标准化可以用来生成新的坐标系,但与正常坐标系不同的是,其正切向量与副向量是不固定的。
Reflect(反射)
从法线定义的平面反射一个向量。Vector3 Reflect (Vector3 inDirection, Vector3 inNormal);
Lerp(线性插值)
Lerp用于在两个点之间进行线性插值。
普通用法:由快到慢移动,且不能到达目标点。
// 起点不固定,终点和比例固定。
Vector3.Lerp(position, targetPosition, 0.1f);
起点不固定,终点和比例固定。
Lerp自然运动:需要结合AnimationCurve(动画曲线)类使用:
Vector3.Lerp(Vector3.zero, targetPosition, curveObj.Evaluate(0.1f));
此运动不会超过终点,使用LerpUnclamped方法可以超过终点。
Evaluate方法传入一个 x 会返回一个 y(运动曲线上的 y )。x到1后终止。
Quaternion
四元数用三个分量 x, y, z 和一个标量 w 来表示旋转。它们结构紧凑,不受万向锁影响,可以轻松插值。 Unity 内部使用四元数来表示所有旋转。
构造函数
public Quaternion (float x, float y, float z, float w);
使用给定的 x、y、z、w 分量构造新的四元数。
静态变量
identity:同一性旋转,与世界坐标保持一致。该四元数对应于“no rotation”- 对象与世界轴或父轴完全对齐。
例:用脚本创建物体,第三个参数角度可使用,使用后所创建的物体将于世界坐标一致。
变量
变量名 | 作用 |
---|---|
eulerAngles | 返回或设置旋转的欧拉角表示。 |
normalized | 返回 magnitude 为 1 时的该四元数。(只读) |
this[int] | 分别使用 [0]、[1]、[2]、[3] 访问 x、y、z 、w 分量。 |
x | 四元数的 X 分量。除非您十分了解四元数,否则不要直接进行此种修改。 |
y | 四元数的 Y 分量。除非您十分了解四元数,否则不要直接进行此种修改。 |
z | 四元数的 Z 分量。除非您十分了解四元数,否则不要直接进行此种修改。 |
w | 四元数的 W 分量。请勿直接修改四元数。 |
常用方法
Eular(欧拉角转四元数)
用于将欧拉角转为四元数。
public static Quaternion Euler (float x, float y, float z);
x,y,z沿某个轴旋转多少度。
四元数转欧拉角
Quaternion qt = this.transform.rotation;
Vector3 eular = qt.eulerAngles;
AngleAxis
创建一个围绕 axis 旋转 angle 度的旋转。
public static Quaternion AngleAxis (float angle, Vector3 axis);
AngleAxis(50, Vector3.up) 与 Eular(0, 50, 0) 作用相同。但如果旋转轴不是主轴,则Eular无用。
LookRotation
获取注释旋转的角度,如直接将角度赋值给Transform,则与调用 LookAt 方法效果相同。如果使用Lerp等方法动态做旋转,则可实现曲线运动,Look只管 z 轴。
Angle
public static float Angle (Vector3 from, Vector3 to);
获取两个向量( from 和 to)之间的夹角。返回值以度为单位,值域为[0, 180],也就是说Angle只能计算180°以内的角,无法确认旋转方向。
SignedAngle
public static float SignedAngle (Vector3 from, Vector3 to, Vector3 axis);
获取两个向量( from 和 to)在axis平面的夹角(以度为单位),其结果值域为[-180, 180],to在from的左边则返回负数,右边则返回正数。
FromToRotation
创建一个从 fromDirection 旋转到 toDirection 的旋转。
public static Quaternion FromToRotation (Vector3 fromDirection, Vector3 toDirection);
通常使用此方法来做轴旋转(对Transform进行转转),使其一个轴(如 y 轴)跟随世界空间中的目标方向。
例如:把y轴旋转到z轴
// 把y轴旋转到z轴
this.transform.rotation = Quaternion.FromToRotation(Vector3.up, transform.forward);
运算符
更多内容请查看总目录【Unity】Unity学习笔记目录整理