unity 数学公式

2015年03月22日 15:09 0 点赞 0 评论 更新于 2025-11-21 18:08

今天,我们来深入探讨有关 Unity Mathf 函数的知识。我通过上网查询资料,将相关内容进行了汇总,以下是详细介绍。

1. Mathf.Abs(绝对值)

static function Abs (f : float) : float

计算并返回指定参数 f 的绝对值。

2. Mathf.Acos(反余弦)

static function Acos (f : float) : float

以弧度为单位计算并返回参数 f 中指定数字的反余弦值。

3. Mathf.Approximately(近似)

static function Approximately (a : float, b: float) : bool

比较两个浮点数值,判断它们是否非常接近。由于浮点数值存在不精确性,不建议使用等于来比较它们。例如,1.0 == 10.0 / 10.0 也许不会返回 true

public class example : MonoBehaviour {
public void Awake() {
if (Mathf.Approximately(1.0F, 10.0F / 10.0F)) {
print("same");
}
}
}

4. Mathf.Asin(反正弦)

static function Asin (f : float) : float

以弧度为单位计算并返回参数 f 中指定数字的反正弦值。

5. Mathf.Atan2(反正切)

static function Atan2 (y : float, x : float) : float

以弧度为单位计算并返回 y/x 的反正切值。返回值表示相对直角三角形对角的角,其中 x 是邻边边长,而 y 是对边边长。返回值是在 x 轴和一个二维向量(开始于 (0, 0) 结束在 (x, y) 处)之间的角。

public class example : MonoBehaviour {
public Transform target;
void Update() {
Vector3 relative = transform.InverseTransformPoint(target.position);
float angle = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg;
transform.Rotate(0, angle, 0);
}
}

6. Mathf.Atan(反正切)

static function Atan (f : float) : float

计算并返回参数 f 中指定数字的反正切值。返回值介于负二分之 pi 与正二分之 pi 之间。

7. Mathf.CeilToInt(最小整数)

static function CeilToInt (f : float) : int

返回大于或等于 f 的最小整数。

8. Mathf.Ceil(上限值)

static function Ceil (f : float) : float

返回 f 指定数字或表达式的上限值。数字的上限值是大于等于该数字的最接近的整数。

9. Mathf.Clamp01(限制 0~1)

static function Clamp01 (value : float) : float

value 限制在 01 之间并返回该值。如果 value 小于 0,返回 0;如果 value 大于 1,返回 1;否则返回 value

10. Mathf.Clamp(限制)

static function Clamp (value : float, min : float, max : float) : float
static function Clamp (value : int, min : int, max : int) : int

value 的值限制在 minmax 之间。如果 value 小于 min,返回 min;如果 value 大于 max,返回 max;否则返回 value

11. Mathf.ClosestPowerOfTwo(最近的二次方)

static function ClosestPowerOfTwo (value : int) : int

返回距离 value 最近的 2 的次方数。

12. Mathf.Cos(余弦)

static function Cos (f : float) : float

返回由参数 f 指定的角的余弦值(介于 -1.0 与 1.0 之间的值)。

13. Mathf.Deg2Rad(度转弧度)

static var Deg2Rad : float

度到弧度的转化常量(只读),等于 (PI * 2) / 360

14. Mathf.Rad2Deg(弧度转度)

static var Rad2Deg : float

弧度到度的转化常量(只读),等于 360 / (PI * 2)

15. Mathf.DeltaAngle(增量角)

static function DeltaAngle (current : float, target : float) : float

计算给定的两个角之间最短的差异。

// Prints 90
Debug.Log(Mathf.DeltaAngle(1080, 90));

16. Mathf.Epsilon(小正数)

static var Epsilon : float

一个很小的浮点数值(只读),是不同于 0 的最小浮点值。遵循以下规则:

  • anyValue + Epsilon = anyValue
  • anyValue - Epsilon = anyValue
  • 0 + Epsilon = Epsilon
  • 0 - Epsilon = -Epsilon 一个在任意数和 Epsilon 之间的值将导致在任意数发生截断误差。
    public class example : MonoBehaviour {
    bool isEqual(float a, float b) {
    if (a >= b - Mathf.Epsilon && a <= b + Mathf.Epsilon) {
    return true;
    } else {
    return false;
    }
    }
    }
    

17. Mathf.Exp(指数)

static function Exp (power : float) : float

返回 epower 次方的值。

18. Mathf.FloorToInt(最大整数)

static function FloorToInt (f : float) : int

返回小于或等于 f 的最大整数。

19. Mathf.Floor(下限值)

static function Floor (f : float) : float

返回参数 f 中指定数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数。

20. Mathf.Infinity(正无穷)

static var Infinity : float

表示正无穷,也就是无穷大,(只读)。

21. Mathf.InverseLerp(反插值)

计算两个值之间的 Lerp 参数,即 valuefromto 之间的比例值。

// 现在参数是 3/5
float parameter = Mathf.InverseLerp(walkSpeed, runSpeed, speed);

22. Mathf.IsPowerOfTwo(是否 2 的幂)

static function IsPowerOfTwo (value : int) : bool

如果该值是 2 的幂,返回 true

// prints false
Debug.Log(Mathf.IsPowerOfTwo(7));
// prints true
Debug.Log(Mathf.IsPowerOfTwo(32));

23. Mathf.LerpAngle(插值角度)

static function LerpAngle (a : float, b : float, t : float) : float

Lerp 的原理一样,但当它们环绕 360 度时确保插值正确。ab 代表度数。

public class example : MonoBehaviour {
public float minAngle = 0.0F;
public float maxAngle = 90.0F;
void Update() {
float angle = Mathf.LerpAngle(minAngle, maxAngle, Time.time);
transform.eulerAngles = new Vector3(0, angle, 0);
}
}

24. Mathf.Lerp(插值)

static function Lerp (from : float, to : float, t : float) : float

基于浮点数 t 返回 fromto 之间的插值,t 限制在 0 到 1 之间。当 t = 0 时返回 from,当 t = 1 时返回 to,当 t = 0.5 时返回 fromto 的平均值。

25. Mathf.Log10(基数 10 的对数)

static function Log10 (f : float) : float

返回 f 的对数,基数为 10。

26. Mathf.Log(对数)

static function Log (f : float, p : float) : float

返回参数 fp 为底的对数。

// 以 2 为底 6 的对数
// prints 2.584963
print(Mathf.Log(6, 2));

27. Mathf.Max(最大值)

static function Max (a : float, b : float) : float
static function Max (params values : float[]) : float

返回两个或更多值中最大的值。

28. Mathf.Min(最小值)

static function Min (a : float, b : float) : float
static function Min (params values : float[]) : float

返回两个或更多值中最小的值。

29. Mathf.MoveTowardsAngle(移动角)

static function MoveTowardsAngle (current : float, target : float, maxDelta : float) : float

类似于 MoveTowards,但当它们环绕 360 度时确保插值正确。变量 currenttarget 作为度数。为优化原因,maxDelta 负值不被支持,可能引起振荡。若要从 target 角推开 current,可添加 180 度角代替。

30. Mathf.MoveTowards(移向)

static function MoveTowards (current : float, target : float, maxDelta : float) : float

改变当前值使其向目标值靠近。这实际上和 Mathf.Lerp 相同,但该函数将确保速度不会超过 maxDeltamaxDelta 为负值时将目标推离。

31. Mathf.NegativeInfinity(负无穷)

static var NegativeInfinity : float

表示负无穷,也就是无穷小,-∞(只读)。

32. Mathf.NextPowerOfTwo(下个 2 的幂)

文档未详细说明该函数的具体实现和作用。

33. Mathf.PingPong(乒乓)

static function PingPong (t : float, length : float) : float

使值在 0length 之间往返。t 值永远不会大于 length 的值,也永远不会小于 0。返回值将在 0length 之间来回移动。

34. Mathf.PI(圆周率)

static var PI : float

PI(读 pai)的值,也就是圆周率(π)的值 3.14159265358979323846...(只读)。

35. Mathf.Pow(次方)

static function Pow (f : float, p : float) : float

计算并返回 fp 次方。

36. Mathf.Repeat(重复)

static function Repeat (t : float, length : float) : float

循环数值 t,使其在 0length 之间。t 值永远不会大于 length 的值,也永远不会小于 0。这类似于模运算符,但可以使用浮点数。

public class example : MonoBehaviour {
void Update() {
transform.position = new Vector3(Mathf.Repeat(Time.time, 3), transform.position.y, transform.position.z);
}
}

37. Mathf.RoundToInt(四舍五入到整数)

static function RoundToInt (f : float) : int

返回 f 指定的值四舍五入到最近的整数。如果数字末尾是 .5,即它处于两个整数中间,无论这两个整数是偶数还是奇数,都将返回偶数。

38. Mathf.Round(四舍五入)

static function Round (f : float) : float

返回浮点数 f 四舍五入最接近的整数。如果数字末尾是 .5,即它处于两个整数中间,无论这两个整数是偶数还是奇数,都将返回偶数。

39. Mathf.Sign(符号)

static function Sign (f : float) : float

返回 f 的符号。当 f 为正或为 0 时返回 1,为负时返回 -1

40. Mathf.Sin(正弦)

static function Sin (f : float) : float

计算并返回以弧度为单位指定的角 f 的正弦值。

41. Mathf.SmoothDampAngle(平滑阻尼角度)

static function SmoothDampAngle (current : float, target : float, ref currentVelocity : float, smoothTime : float, maxSpeed : float = Mathf.Infinity, deltaTime : float = Time.deltaTime) : float

参数说明:

  • current:当前的位置。
  • target:试图达到的位置。
  • currentVelocity:当前速度,该值在访问此函数时会被随时修改。
  • smoothTime:要到达目标位置的近似时间,实际到达目标时要快一些。
  • maxSpeed:可选参数,允许限制的最大速度。
  • deltaTime:上次调用该函数到现在的时间,缺省为 Time.deltaTime

随着时间的推移逐渐改变一个给定的角度到期望的角度。该值通过类似弹簧减震器的功能被平滑,可用于平滑任何一种值,如位置、颜色、标量等,最常见的是用于平滑跟随摄像机。

// 一个简单的平滑跟随摄像机
// 跟随目标的朝向
public class example : MonoBehaviour {
public Transform target;
public float smooth = 0.3F;
public float distance = 5.0F;
private float yVelocity = 0.0F;
void Update() {
// 从目前的 y 角度变换到目标 y 角度
float yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, target.eulerAngles.y, ref yVelocity, smooth);
// target 的位置
Vector3 position = target.position;
// 然后,新角度之后的距离偏移
position += Quaternion.Euler(0, yAngle, 0) * new Vector3(0, 0, -distance);
// 应用位置
transform.position = position;
// 看向目标
transform.LookAt(target);
}
}

42. Mathf.SmoothDamp(平滑阻尼)

static function SmoothDamp (current : float, target : float, ref currentVelocity : float, smoothTime : float, maxSpeed : float = Mathf.Infinity, deltaTime : float = Time.deltaTime) : float

参数说明:

  • current:当前的位置。
  • target:试图达到的位置。
  • currentVelocity:当前速度,该值在访问此函数时会被随时修改。
  • smoothTime:要到达目标位置的近似时间,实际到达目标时要快一些。
  • maxSpeed:可选参数,允许限制的最大速度。
  • deltaTime:上次调用该函数到现在的时间,缺省为 Time.deltaTime

随着时间的推移逐渐改变一个值到期望值。该值就像被一个不会崩溃的弹簧减振器一样被平滑,可用于平滑任何类型的值,如位置、颜色、标量等。

public class example : MonoBehaviour {
public Transform target;
public float smoothTime = 0.3F;
private float yVelocity = 0.0F;
void Update() {
float newPosition = Mathf.SmoothDamp(transform.position.y, target.position.y, ref yVelocity, smoothTime);
transform.position = new Vector3(transform.position.x, newPosition, transform.position.z);
}
}

43. Mathf.SmoothStep(平滑插值)

static function SmoothStep (from : float, to : float, t : float) : float

lerp 类似,在最小和最大值之间进行插值,并在限制处渐入渐出。

public class example : MonoBehaviour {
public float minimum = 10.0F;
public float maximum = 20.0F;
void Update() {
transform.position = new Vector3(Mathf.SmoothStep(minimum, maximum, Time.time), 0, 0);
}
}

44. Mathf.Sqrt(平方根)

static function Sqrt (f : float) : float

计算并返回 f 的平方根。

45. Mathf.Tan(正切)

static function Tan (f : float) : float

计算并返回以弧度为单位 f 指定角度的正切值。

作者信息

feifeila

feifeila

共发布了 3994 篇文章