Unity2D游戏开发-常用的计算方法

Mathf方法

基本方法

  • Mathf.abs() 计算绝对值。

  • Mathf.ceil() 将数字向上舍入为最接近的整数。

  • Mathf.floor() 将数字向下舍入为最接近的整数。

  • Mathf.round() 四舍五入为最接近的整数。

  • Mathf.max() 返回两个整数中较大的一个。  

  • Mathf.min() 返回两个整数中较小的一个。

  • Mathf.random() 返回一个0.0 与1.0 之间的伪随机数。

平方/开方

  • Mathf.pow() 计算x 的y 次方。

  • Mathf.sqrt() 计算平方根。

夹值

返回夹与最大值与最小值的值。

float Clamp(float value, float min, float max)

若正好在区间内则直接返回原值,如果比最大值大则返回最大值,若比最小值小则返回最小值。

1
2
float num01 = Mathf.Clamp(0.6f, 0.8f, 2.0f);
print(num01);

角度相关

  • Mathf.sin() 计算正弦值。

  • Mathf.acos() 计算反余弦值。

  • Mathf.asin() 计算反正弦值。

  • Mathf.atan() 计算反正切值。

  • Mathf.atan2() 计算从x 坐标轴到点的角度。

  • Mathf.cos() 计算余弦值。

  • Mathf.tan() 计算正切值。

Vector3

静态变量

方法 说明
back 用于编写 Vector3(0, 0, -1) 的简便方法。
down 用于编写 Vector3(0, -1, 0) 的简便方法。
forward 用于编写 Vector3(0, 0, 1) 的简便方法。
left 用于编写 Vector3(-1, 0, 0) 的简便方法。
negativeInfinity 用于编写 Vector3(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity) 的简便方法。
one 用于编写 Vector3(1, 1, 1) 的简便方法。
positiveInfinity 用于编写 Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity) 的简便方法。
right 用于编写 Vector3(1, 0, 0) 的简便方法。
up 用于编写 Vector3(0, 1, 0) 的简便方法。
zero 用于编写 Vector3(0, 0, 0) 的简便方法

变量

方法 说明
magnitude 返回该向量的长度。(只读)
normalized 返回 magnitude 为 1 时的该向量。(只读)
sqrMagnitude 返回该向量的平方长度。(只读)
this[int] 分别使用 [0]、[1]、[2] 访问 x、y、z 分量。
x 向量的 X 分量。
y 向量的 Y 分量。
z 向量的 Z 分量。

示例

1
2
Vector3 vector = new Vector3(20, 10, 10);
Vector3 v = vector.normalized;

静态函数

方法 说明
Angle 获取from和to之间以度为单位的无符号角。
ClampMagnitude 返回 vector 的副本,其大小被限制为 /maxLength/。
Cross 两个向量的叉积。
Distance 返回 a 与 b 之间的距离。
Dot 两个向量的点积。
Lerp 在两个点之间进行线性插值。
LerpUnclamped 在两个向量之间进行线性插值。
Max 返回由两个向量的最大分量组成的向量。
Min 返回由两个向量的最小分量组成的向量。
MoveTowards 计算 current 指定的点与 target 指定的点之间的位置,移动距离不超过 maxDistanceDelta 指定的距离。
Normalize 使该向量的值为 1。
OrthoNormalize 将向量标准化并使它们彼此正交。
Project 将向量投影到另一个向量上。
ProjectOnPlane 将向量投影到由法线定义的平面上(法线与该平面正交)。
Reflect 从法线定义的平面反射一个向量。
RotateTowards 将向量 current 朝 target 旋转。
Scale 将两个向量的分量相乘。
SignedAngle 向量之间的夹角,返回两个向量之间较小的角度(在旋转计算中常常用到)
Slerp 在两个向量之间进行球形插值。
SlerpUnclamped 在两个向量之间进行球形插值。
SmoothDamp 随时间推移将一个向量逐渐改变为所需目标。

运算符

方法 说明
operator - 将一个向量减去另一个向量。
operator != 不相等返回true。
operator * 将向量乘以一个数值。
operator / 将向量除以一个数值。
operator + 将两个向量相加。
operator == 如果两个向量相等,则返回 true。

Vector2

用于表示 2D 向量和点。

在某些地方,可以使用该结构表示 2D 位置和向量 (例如 Mesh 中的纹理坐标或 Material 中的纹理偏移)。在大多数其他情况下, 需要使用 Vector3。

静态变量

方法 说明
down 用于编写 Vector2(0, -1) 的简便方法。
left 用于编写 Vector2(-1, 0) 的简便方法。
negativeInfinity 用于编写 Vector2(float.NegativeInfinity, float.NegativeInfinity) 的简便方法。
one 用于编写 Vector2(1, 1) 的简便方法。
positiveInfinity 用于编写 Vector2(float.PositiveInfinity, float.PositiveInfinity) 的简便方法。
right 用于编写 Vector2(1, 0) 的简便方法。
up 用于编写 Vector2(0, 1) 的简便方法。
zero 用于编写 Vector2(0, 0) 的简便方法。

变量

方法 说明
magnitude 返回该向量的长度。(只读)
normalized 返回 magnitude 为 1 时的该向量。(只读)
sqrMagnitude 返回该向量的平方长度。(只读)
this[int] 分别使用 [0] 或 [1] 访问 x 或 y 分量。
x 向量的 X 分量。
y 向量的 Y 分量。

构造函数

方法 说明
Vector2 使用给定的 x、y 分量构造新向量。

公共函数

方法 说明
Equals 如果给定向量与该向量完全相等,则返回 true。
Normalize 使该向量的 magnitude 为 1。
Set 设置现有 Vector2 的 x 和 y 分量。
ToString Returns a formatted string for this vector.

静态函数

方法 说明
Angle 获取from和to之间以度为单位的无符号角。
ClampMagnitude 返回 vector 的副本,其大小被限制为 /maxLength/。
Distance 返回 a 与 b 之间的距离。
Dot 两个向量的点积。
Lerp 在向量 a 与 b 之间按 t 进行线性插值。
LerpUnclamped 在向量 a 与 b 之间按 t 进行线性插值。
Max 返回由两个向量的最大分量组成的向量。
Min 返回由两个向量的最小分量组成的向量。
MoveTowards 将点 current 移向 /target/。
Perpendicular 返回垂直于该 2D 向量的 2D 向量。对于正 Y 轴向上的 2D 坐标系来说,结果始终沿逆时针方向旋转 90 度。
Reflect 从法线定义的向量反射一个向量。
Scale 将两个向量的分量相乘。
SignedAngle Gets the signed angle in degrees between from and to.
SmoothDamp 随时间推移将一个向量逐渐改变为所需目标。

运算符

方法 说明
operator - 将一个向量减去另一个向量。
operator * 将向量乘以一个数值。
operator / 将向量除以一个数值。
operator + 将两个向量相加。
operator == 如果两个向量大致相等,则返回 true。
Vector2 将 Vector3 转换为 Vector2。
Vector3 将 Vector2 转换为 Vector3。

Quaternion

四元数用于表示旋转。

Quaternion.AngleAxis

创建一个围绕 axis 旋转 angle 度的旋转。

public static QuaternionAngleAxis (float angle, Vector3 axis);

围绕Z轴旋转30度角。

1
transform.rotation = Quaternion.AngleAxis(30, Vector3.forward);

朝向

a朝向b

1
2
3
4
Vector3 v = b.transform.position - a.transform.position;
float angle = Mathf.Atan2(v.y, v.x) * Mathf.Rad2Deg;
Quaternion trailRotation = Quaternion.AngleAxis(angle, Vector3.forward);
a.transform.rotation = trailRotation;