Unity中常用的基本数学库——Mathf
需要在命名空间UnityEngine下。
参考官方文档:Mathf
Ceeger视界:Mathf 数学运算
静态变量(都是只读的)
变量名 | 说明 | 使用 |
---|
Deg2Rad | Degrees-to-radians。把角度换成弧度的变量,等价 (PI * 2)/360 。 | 角度 * Mathf.Deg2Rad == 弧度 |
Rad2Deg | Radians-to-degrees。等价 360/(PI * 2)。 | 弧度 * Mathf.Rad2Deg == 角度 |
Epsilon | 大于0的最小float的值,常用来避免系统误差。我之前写过,点这里。 | if (a >= b - Mathf.Epsilon && a <= b + Mathf.Epsilon) 排除系统误差,判断a的值等于b。 |
Infinity | 正无穷,可能是浮点数的最大值吧。 | 略。 |
NegativeInfinity | 负无穷。 | 略。 |
PI | 3.14159265358979… | 略。 |
静态方法
下面的方法声明都省略了public static 关键字。
三角函数
方法名 | 声明 | 说明 |
---|
Acos | float Acos(float f) | 返回反余弦值。 |
Asin | float Asin(float f) | 返回反正弦值。 |
Atan | float Atan(float f) | 返回反正切值。 |
Atan2 | float Atan2(float y, float x) | 返回反正切值。允许x等于0,及不像Atan(y/x);(x==0) 时会抛出异常。所以最好用这个求反正切值。 |
Cos | float Cos(float f) | 返回余弦值。 |
Sin | float Sin(float f) | 返回正弦值。 |
Tan | float Tan(float f) | 返回正切值。 |
数值转换
方法名 | 声明 | 说明 |
---|
Abs | float Abs(float f) | 返回绝对值,浮点型。 |
Ceil | float Ceil(float f) | 返回大于f的最小整数,浮点型。 |
CeilToInt | int CeilToInt(float f) | 同上,返回整形。 |
Clamp | float Clamp(float value, float min, float max) | 返回value限制在min和max范围内的值。就是如果value小于min返回min,大于max就返回max,否则返回value。 |
Clamp01 | float Clamp01(float value) | 限制在0到1之间。等价Clamp(value,0,1)。 |
Floor | float Floor(float f) | 返回小于f的最大整数。 |
FloorToInt | int FloorToInt(float f) | 同上,返回整形。 |
Exp | float Exp(float power) | 返回e的power次方。e为自然指数(2.71828182845904523536…) |
Log | float Log(float f, float p) | 返回
logpf
的值,f是真值,p是底数。 |
Log10 | float Log10(float f) | 返回
lgf
的值。 |
Pow | float Pow(float f, float p) | 返回
fp
,f的p次幂。 |
Round | float Round(float f) | 四舍五入,但是比较诡异的是不管正负,如果小数部分是0.5,那就返回靠近的偶数,如10.5返回10,11.5返回12。 |
RoundToInt | int RoundToInt(float f) | 同上,返回整形。 |
Sqrt | float Sqrt(float f) | 返回
f√
。f为被开方数。 |
数值处理
方法名 | 声明 | 说明 |
---|
Approximately | bool Approximately(float a, float b) | 判断两个浮点数是否相近,就是上面Mathf.Epsilon使用的意思 。 |
ClosestPowerOfTwo | int ClosestPowerOfTwo(int value) | 返回最靠近(value的二次方)的数。如value值为7,返回8(2^3),value值为19,返回16(2^4)。 |
DeltaAngle | float DeltaAngle(float current, float target) | 返回两个角最小相差的角度,可以理解为先把两个角都缩小到0-360度内,然后再比较两个角相差角度。 |
IsPowerOfTwo | bool IsPowerOfTwo(int value) | 判断是否是2的次幂。 |
Max | float Max(params float[] values) | 返回最大的数。 |
Min | float Min(params float[] values) | 返回最小的数。 |
NextPowerOfTwo | int NextPowerOfTwo(int value) | 返回下一个二次幂,如value为7,返回8;value为139,返回256。 |
Sign | float Sign(float f) | 如果f大于等于0,返回1;反之返回-1。 |
曲线
方法名 | 声明 | 说明 |
---|
InverseLerp | float InverseLerp(float a, float b, float value) | 返回反插值。等价于b - t * (b-a) |
Lerp | float Lerp(float a, float b, float t) | 返回插值。a小于b,t范围在0~1之间,相当于百分比,等价于t * (b-a) + a |
LerpAngle | float LerpAngle(float a, float b, float t) | 类似插值,相当于a和b都取360的余数再计算(0 == 360),如果b-a大于180,会变成相当于(b-a-360),及如果b-a等于270度,实际就是-90度。 |
LerpUnclamped | float LerpUnclamped(float a, float b, float t) | 类似插值,但t没有限制,可以爆表的意思。 |
MoveTowards | float MoveTowards(float current, float target, float maxDelta) | 类似Lerp,但它返回值确保不超过maxDelta,maxDelta为负就是反方向的意思。 |
MoveTowardsAngle | float MoveTowardsAngle(float current, float target, float maxDelta) | 类似LerpAngle ,maxDelta不为负,要反方向的话加180度。 |
PingPong | float PingPong(float t, float length) | (这方法名真是666)意思就是返回0到length之间摆动的值,初始值为t。实质有点像正弦那曲线,只不过是直的。 |
Repeat | float Repeat(float t, float length) | 从0到length的周期变化,类似t对length求模。只不过t是浮点的,更牛了。 |
SmoothDamp | float SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime) | 平滑阻尼,就是很顺溜的减速过去目标,返回新的current值,常见用于镜头跟踪。 |
SmoothDampAngle | float SmoothDampAngle(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime) | 类似上面,减速到目标角度。像有人叫你,你头转向目标。 |
SmoothStep | float SmoothStep(float from, float to, float t) | 平滑插值,逐渐加速然后逐渐减速。返回当前位置。 |
借用Unity的动画曲线
曲线类名 | 曲线图 |
---|
Lerp系列,Move系列 |  |
PingPong |  |
Repeat |  |
SmoothDamp系列 |  |
SmoothStep |  |
其他
方法名 | 声明 | 说明 |
---|
CorrelatedColorTemperatureToRGB | Color CorrelatedColorTemperatureToRGB(float kelvin) | 把温度(开氏度)变成颜色,kelvin范围在1000到40000。 |
GammaToLinearSpace | float GammaToLinearSpace(float value) | 转换gamma(sRGB)到linear color space。 |
LinearToGammaSpace | float LinearToGammaSpace(float value) | 转换liner到 gamma color space。 |
PerlinNoise | float PerlinNoise(float x, float y) | 柏林噪波,可以生成比较舒服的随机数,就是说不是完全随机的,有总渐变效果的,可以用来产生随机颜色的渐变效果。 |