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

2023-08-08 13:01:02 浏览数 (2)

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)

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

代码语言:javascript复制
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 分量。

示例

代码语言:javascript复制
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度角。

代码语言:javascript复制
transform.rotation = Quaternion.AngleAxis(30, Vector3.forward);

朝向

a朝向b

代码语言:javascript复制
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;

0 人点赞