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 累加 → 匀速

浙公网安备 33010602011771号