Unity Mathf中的数学运算

发表于2018-01-05
评论0 7.6k浏览

Unity中的Mathf类为我们封装了大量的静态方法和静态变量,这里就参照这官网的API来总结一下Mathf类常用的方法和和变量。

静态变量(都是只读的)
变量名说明使用
Deg2RadDegrees-to-radians。把角度换成弧度的变量,等价 (PI * 2)/360 。角度 * Mathf.Deg2Rad == 弧度
Rad2DegRadians-to-degrees。等价 360/(PI * 2)。弧度 * Mathf.Rad2Deg == 角度
Epsilon大于0的最小float的值,常用来避免系统误差。我之前写过,点这里if (a >= b - Mathf.Epsilon && a <= b + Mathf.Epsilon)排除系统误差,判断a的值等于b。
Infinity正无穷,可能是浮点数的最大值吧。略。
NegativeInfinity负无穷。略。
PI3.14159265358979…略。

静态方法

  下面的方法声明都省略了public static 关键字。


三角函数

方法名声明说明
Acosfloat Acos(float f)返回反余弦值。
Asinfloat Asin(float f)返回反正弦值。
Atanfloat Atan(float f)返回反正切值。
Atan2float Atan2(float y, float x)返回反正切值。允许x等于0,及不像Atan(y/x);(x==0)时会抛出异常。所以最好用这个求反正切值。
Cosfloat Cos(float f)返回余弦值。
Sinfloat Sin(float f)返回正弦值。
Tanfloat Tan(float f)返回正切值。

数值转换

方法名声明说明
Absfloat Abs(float f)返回绝对值,浮点型。
Ceilfloat Ceil(float f)返回大于f的最小整数,浮点型。
CeilToIntint CeilToInt(float f)同上,返回整形。
Clampfloat Clamp(float value, float min, float max)返回value限制在min和max范围内的值。就是如果value小于min返回min,大于max就返回max,否则返回value。
Clamp01float Clamp01(float value)限制在0到1之间。等价Clamp(value,0,1)。
Floorfloat Floor(float f)返回小于f的最大整数。
FloorToIntint FloorToInt(float f)同上,返回整形。
Expfloat Exp(float power)返回e的power次方。e为自然指数(2.71828182845904523536…)
Logfloat Log(float f, float p)返回 logpf 的值,f是真值,p是底数。
Log10float Log10(float f)返回lgf 的值。
Powfloat Pow(float f, float p)返回 fp,f的p次幂。
Roundfloat Round(float f)四舍五入,但是比较诡异的是不管正负,如果小数部分是0.5,那就返回靠近的偶数,如10.5返回10,11.5返回12。
RoundToIntint RoundToInt(float f)同上,返回整形。
Sqrtfloat Sqrt(float f)返回f。f为被开方数。

数值处理

方法名声明说明
Approximatelybool Approximately(float a, float b)判断两个浮点数是否相近,就是上面Mathf.Epsilon使用的意思 。
ClosestPowerOfTwoint ClosestPowerOfTwo(int value)返回最靠近(value的二次方)的数。如value值为7,返回8(2^3),value值为19,返回16(2^4)。
DeltaAnglefloat DeltaAngle(float current, float target)返回两个角最小相差的角度,可以理解为先把两个角都缩小到0-360度内,然后再比较两个角相差角度。
IsPowerOfTwobool IsPowerOfTwo(int value)判断是否是2的次幂。
Maxfloat Max(params float[] values)返回最大的数。
Minfloat Min(params float[] values)返回最小的数。
NextPowerOfTwoint NextPowerOfTwo(int value)返回下一个二次幂,如value为7,返回8;value为139,返回256。
Signfloat Sign(float f)如果f大于等于0,返回1;反之返回-1。

曲线

方法名声明说明
InverseLerpfloat InverseLerp(float a, float b, float value)返回反插值。等价于b - t * (b-a)
Lerpfloat Lerp(float a, float b, float t)返回插值。a小于b,t范围在0~1之间,相当于百分比,等价于t * (b-a) + a
LerpAnglefloat LerpAngle(float a, float b, float t)类似插值,相当于a和b都取360的余数再计算(0 == 360),如果b-a大于180,会变成相当于(b-a-360),及如果b-a等于270度,实际就是-90度。
LerpUnclampedfloat LerpUnclamped(float a, float b, float t)类似插值,但t没有限制,可以爆表的意思。
MoveTowardsfloat MoveTowards(float current, float target, float maxDelta)类似Lerp,但它返回值确保不超过maxDelta,maxDelta为负就是反方向的意思。
MoveTowardsAnglefloat MoveTowardsAngle(float current, float target, float maxDelta)类似LerpAngle ,maxDelta不为负,要反方向的话加180度。
PingPongfloat PingPong(float t, float length)(这方法名真是666)意思就是返回0到length之间摆动的值,初始值为t。实质有点像正弦那曲线,只不过是直的。
Repeatfloat Repeat(float t, float length)从0到length的周期变化,类似t对length求模。只不过t是浮点的,更牛了。
SmoothDampfloat SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime)平滑阻尼,就是很顺溜的减速过去目标,返回新的current值,常见用于镜头跟踪。
SmoothDampAnglefloat SmoothDampAngle(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime)类似上面,减速到目标角度。像有人叫你,你头转向目标。
SmoothStepfloat SmoothStep(float from, float to, float t)平滑插值,逐渐加速然后逐渐减速。返回当前位置。


借用Unity的动画曲线

曲线类名曲线图
Lerp系列,Move系列
PingPong
Repeat
SmoothDamp系列
SmoothStep

其他

方法名声明说明
CorrelatedColorTemperatureToRGBColor CorrelatedColorTemperatureToRGB(float kelvin)把温度(开氏度)变成颜色,kelvin范围在1000到40000。
GammaToLinearSpacefloat GammaToLinearSpace(float value)转换gamma(sRGB)到linear color space。
LinearToGammaSpacefloat LinearToGammaSpace(float value)转换liner到 gamma color space。
PerlinNoisefloat PerlinNoise(float x, float y)柏林噪波,可以生成比较舒服的随机数,就是说不是完全随机的,有总渐变效果的,可以用来产生随机颜色的渐变效果。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: