今天给大家总结了一下常用的Mathf类,还有一些公式的推导,如有不正之处,还望指出!
一: Mathf Properties And Methods
Mathf.Deg2Rad: 度数转弧度的转换常量
Mathf.Rad2Deg: 由弧度转度数的常量
Mathf.Clamp: 限制输入的值返回在最大值和最小值之间
当输入的值小于最小值时,返回最小值
当输入的值大于最大值时,返回最大值
当输入的值大于最小值且小于最大值时,返回自身
Mathf.ClosestPowerOfTwo: 传入一个值,2的次幂最接近它就返回那个值如传入12,8和16都接近它,优先返回最大的值
当传入的值小于0,则该值为0
Mathf.DeltaAngle: 返回以度为单位两个角度之间的差值,是以目标值减当前值当目标值或者当前值为负数时,需要减去360度,转成正值在进行计算
Mathf.InverseLerp: 在value[a,b]范围内产生线性差值的
当a<Value<b的时候,返回的比例为0.5
当Value<a的时候,返回的比例为0
当Value>b的时候,返回的比例为1
公式: result = (Value-from) / (to-from)
Mathf.Lerp: 平滑差值,将传入的值由自定义的速度从最小值平滑过渡到最大
当速度t= 0,返回最小值
当速度t =1,返回最大值
当速度t = 0.5,返回最大值和最小值和的一半
Mathf.LerpAngle: 与Lerp相同但确保值在360度的时正确插值,当超过360度需要减去一个360度 参数t被限制在[0,180]范围。 变量a并b假定为度数。
Mathf.MoveTowards: 该方法返回一个Current到Target之间的插值, 返回值是maxDelta的约束 ,设a,b,c为三个float类型的数值,且方法 Mathf.MoveTowards(a,b,d),返回值为c,
如果 a < b ,a + b < b, c = a + d,如果a + d >b, c = b;
如果 a > b ,a - b > b, c = a - d,如果a + d <b, c = b;
Mathf.MoveTowardsAngle: 值最好在360度之内进行插值,变量current从一段时间内插值到target, 返回值为float的度数,maxDelta不支持负数
Mathf.PingPong: 跟乒乓球一样的运动,t永远不会大于length,且永远不会小于1
Mathf.PingPong(t, l),
l > 0, 则,当|t| % 2l <= l, f = |t| % l,
l > 0,则, 当|t| % 2l > l, f = l - |t| % l,
l < 0,则,当|t| % |2l| <= l时, f = 2 * l + |t| % |2l|
l < 0,则,当|t| % |2l| > l时, f = -|t| % |2l|
Mathf.Repeat: 循环值t,使其永远不会大于length并且永远不会小于0,这类似于模运算符,但它适用于浮点数
Mathf.Repeat(t, l)
t > 0, l > 0, f = t % l;
t < 0, l < 0, f = -(-t % -l);
t > 0, l < 0, f = l + t % -l;
t < 0, l < 0,f = -(l + (-t) % l)
当l=0时,数不存在
Mathf.Round: 返回f四舍五入到最接近的整数。
如果数字以.5结尾,那么它在两个整数之间
如果其中一个是偶数,另一个是奇数,则返回偶数。
Mathf.SmoothDamp: 从当前值在一定时间内像阻尼弹簧一样运动到目标值,运动的规律先慢后快,逐渐增大传出的值:
ref xVelocity: 当前帧的最大速度值,返回的是一个模拟插值
smoothTime: 为平滑时间,物体越靠近目标,加速度的绝对值越小,范围在[0,1]
maxSpeed : 每帧返回值的最大值
Mathf.SmoothDampAngle: 平滑阻尼角度,在一定时间内从当前角度到达目标值的度一些类似弹簧阻尼器的功能使该值平滑。该函数可用于平滑任何类型的值, 位置,颜色,标量。最常见的用途是平滑后续相机。
Mathf.SmoothStep: 在Time时间内,从form值插值到to,这个函数以类似于Lerp的方式在min和max之间插入。
规律是从开始逐渐加速,到结束时逐渐减速。这对于创建看起来自然的动画、淡入和其他过渡非常有用。
接下来我会总结四元数类,如果感觉帮助到你了,帮助点个赞好吗,谢谢!