Mathf

目录


Mathf 常用方法

一次计算类方法

  • Mathf.PI; // 圆周率
  • Mathf.Abs(-10); // 绝对值
  • Mathf.CeilToInt(5.1f); // 向上取整(两个整数相除时,需要(float)强转一次)
  • Mathf.FloorToInt(5.1f); // 向下取整(两个整数相除时,需要(float)强转一次)
  • 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); // 正负号(>0返回1 =0返回0 <0返回-1)
  • 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.transform.position = Vector3.Lerp(obj.transform.position,target.transform.position,Time.deltaTime);

匀速插值

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

Slerp(球形插值)

先快后慢

obj.transform.position = Vector3.Slerp(obj.transform.position,target.transform.position,Time.deltaTime);
obj.transform.rotation= Quaternion.Slerp(obj.transform.rotation, target.transform.rotation, Time.deltaTime);

匀速式

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

Lerp与Slerp区别

项目 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;

posted @ 2025-11-22 10:48  高山仰止666  阅读(6)  评论(0)    收藏  举报