Mathf

目录


Mathf 常用方法

一次计算类方法

  • Mathf.PI; // 圆周率
  • Mathf.Abs(-10); // 绝对值
  • Mathf.CeilToInt(5.1f); // 向上取整
  • Mathf.FloorToInt(5.1f); // 向下取整
  • Mathf.RoundToInt(3.6f); // 四舍五入
  • Mathf.Max(3, 6, 9);
  • Mathf.Min(3, 6, 9);
  • Mathf.Clamp(5.5f, 0, 5); // 钳制
  • Mathf.Pow(2, 4); // 幂
  • Mathf.Sqrt(4); // 根号
  • Mathf.Sign(-8); // 正负号
  • Mathf.IsPowerOfTwo(8); // 是否为 2 的 n 次方

逐帧计算类方法

常用于插值、平滑动画、缓动:

  • Mathf.Lerp
  • Vector3.Lerp
  • Vector3.Slerp
  • Quaternion.lerp(不常用)
  • Quaternion.Slerp(常用)
  • 注:Mathf不存在Slerp

Lerp / Slerp 详解

Lerp(线性插值)

公式:

result = start + (end - start) * t

先快后慢

start= Mathf.Lerp(start, target, Time.deltaTime);
obj.transition = Vector3.Lerp(obj.transition,target.transition,Time.deltaTime);

匀速插值

t += Time.deltaTime;
value = Mathf.Lerp(start, target, t);
obj.transition = Vector3.Lerp(start.transition,target.transition,t);

Slerp(球形插值)

先快后慢

obj.transition = Vector3.Slerp(obj.transition,target.transition,Time.deltaTime);

匀速式

t += Time.deltaTime;
obj.transition = Vector3.Slerp(start.transition,target.transition,t);
obj.rotation = Quaternion.Slerp(start.rotation, target.rotation, t);

两者区别总结

项目 Lerp Slerp
路径 直线 球面弧线
常用类型 float / Vector3 Vector3 / Quaternion
常用于 位置直线变化 位置弧线变化 、方向变化
result和start都是本身 先快后慢 先快后慢
start是常量,t匀速累加 匀速 匀速

三角函数基础

  • float rad;
  • float angle;

弧度 ↔ 角度

  • rad = angle * Mathf.Deg2Rad;
  • angle = rad * Mathf.Rad2Deg;

正弦 / 余弦

  • float s = Mathf.Sin(rad);
  • float c = Mathf.Cos(rad);

反三角

  • float rad1 = Mathf.Acos(c);
  • float rad2 = Mathf.Asin(s);

转回角度

  • float angle1 = rad1 * Mathf.Rad2Deg;

总结

  • Lerp:直线插值
  • Slerp:球面插值
  • Time.deltaTime → 阻尼(越靠近越慢)
  • t 累加 → 匀速
posted @ 2025-11-22 10:48  高山仰止666  阅读(1)  评论(0)    收藏  举报