当前位置:   article > 正文

【Unity】Unity常用类:向量Vector3、四元数Quaternion_quaternion和vector4的区别

quaternion和vector4的区别


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);
  • 1
  • 2

起点不固定,终点和比例固定。

Lerp自然运动:需要结合AnimationCurve(动画曲线)类使用:

Vector3.Lerp(Vector3.zero, targetPosition, curveObj.Evaluate(0.1f));
  • 1

此运动不会超过终点,使用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;
  • 1
  • 2

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);
  • 1
  • 2

运算符

在这里插入图片描述


更多内容请查看总目录【Unity】Unity学习笔记目录整理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/649796
推荐阅读
相关标签
  

闽ICP备14008679号