Unity学习笔记之——常用Mathf函数

本文详细介绍了Unity引擎中Mathf类提供的各种数学函数,包括绝对值、三角函数、对数、插值、平滑转换等,这些函数在游戏开发中用于处理坐标、动画、碰撞检测等方面。
摘要由CSDN通过智能技术生成

Mathf.Abs(f)——绝对值

        计算并返回指定参数 f 绝对值


Mathf.Sin(f)——正弦

        计算并返回以弧度为单位指定的角 f 的正弦值


Mathf.Asin(f)——反正弦

        以弧度为单位计算并返回参数 f 中指定的数字的反正弦值


Mathf.Cos(f)——余弦

        计算并返回以弧度为单位指定的角 f 的余弦值


Mathf.Acos(f)——反余弦

        以弧度为单位计算并返回参数 f 中指定的数字的反余弦值


Mathf.Tan(f)——正切 

        计算并返回以弧度为单位 f 指定角度的正切值。


Mathf.Atan(y : float, x :float)——反正切

        以弧度为单位计算并返回 y/x 的反正切值。

        返回值表示相对直角三角形对角的角,其中 x 是临边边长,而 y 是对边边长。 

        返回值是在x轴和一个二维向量开始于0个结束在(x,y)处之间的角。 


Mathf.Atan2(f:float)——反正切

        计算并返回参数 f 中指定的数字的反正切值。返回值介于负二分之 PI与正二分之 PI 之间。


Mathf.Approximately(f)——近似

        比较两个浮点数值,看它们是否非常接近, 返回bool值。


Mathf.Sqrt(f)——平方根

        计算并返回 f 的平方根


Mathf.SmoothStep(min,max,Time.time)——平滑插值

        和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出


Mathf.CeilToInt(f)——最小整数

        返回最小的整数,该整数大于或等于f


Mathf.FloorToInt(f)——最大整数

        返回最大的整数,该整数小于或等于f


Mathf.Ceil(f)——上限值

        返回 f 指定数字或表达式的上限值。数字的上限值是大于等于该数字的最接近的整数


Mathf.Floor(f)——下限值

        返回参数 f 中指定的数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数。


Mathf.Clamp(value:float,min:float,max:float)——限制

        限制value的值在min和max之间, 如果value小于min,返回min;如果value大于max,返回max,否则返回value


Mathf.Clamp01 (value : float)——限制0-1

        限制value在0,1之间并返回value。如果value小于0,返回0。如果value大于1,返回1,否则返回value


Mathf.Exp (power : float)——指数

        返回 e 的 power 次方的值。


Mathf.ClosestPowerOfTwo(value:int)——最近的二次方

        返回距离value最近的2的次方数。


Mathf.Deg2Rad——度转弧度

        度到弧度的转化常量。这等于(PI * 2) / 360。(只读)


Mathf.Rad2Deg——弧度转度 

        弧度到度的转化常量。这等于 360 / (PI * 2)。 (只读) 


Mathf.IsPowerOfTwo(value:int)——是否2的幂

        如果该值是2的幂,返回true。


Mathf.NextPowerOfTwo(value:int)——下个2的幂 

        返回大于或等于参数的下一个 2 的幂


Mathf.Lerp(from : float, to :float, t : float)——插值

        基于浮点数t返回a到b之间的插值,t限制在0~1之间。
        当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值


Mathf.LerpAngle(a : float, b :float, t : float)——插值角度

        和Lerp的原理一样,当他们环绕360度确保插值正确。
        a和b是代表度数。


Mathf.SmoothStep(from : float,to : float, t : float)——平滑差值

        和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。


Mathf.Max(a : float, b : float) / Mathf.Max(values:float[])——最大值

        返回两个或更多值中最大的值


Mathf.Min(a : float, b : float) / Mathf.Min(values:float[])——最小值

        返回两个或更多值中最小的值


Mathf.MoveTowardsAngle(current :float, target : float,maxDelta:float)——移动角

        变量current和target是度数。为优化原因,maxDelta负值的不被支持,可能引起振荡。


Mathf.MoveTowards(current :float, target : float, maxDelta : float)——移向

        改变一个当前值向目标值靠近。
        和 Mathf.Lerp相同,该函数将确保我们的速度不会超过maxDelta。maxDelta为负值将目标从推离。


Mathf.PingPong(t : float, length: float)——乒乓(做来回运动)

        0到length之间往返。t值永远不会大于length的值,也永远不会小于0。
        返回值将在0和length之间来回移动。


Mathf.PI——圆周率

        只读


Mathf.Pow(f : float, p : float)——次方

        计算并返回 f 的 p 次方。


Mathf.Repeat(t : float, length :float)——重复

        循环数值t,0到length之间。t值永远不会大于length的值,也永远不会小于0。
这是类似于模运算符,但可以使用浮点数。


Mathf.Round(f:float)——四舍五入

        返回浮点数 f 进行四舍五入最接近的整数,返回float类型。
        如果数字末尾是.5,将返回偶数。


Mathf.RoundToInt(f:float)——四舍五入到整数

        返回浮点数 f 进行四舍五入最接近的整数,返回int类型。
        如果数字末尾是.5,将返回偶数。


Mathf.DeltaAngle(current :float, target : float)——增量角 

        计算给定的两个角之间最短的差异。 

// Prints 90 
Debug.Log(Mathf.DeltaAngle(1080,90)); 

 Mathf.Epsilon——小正数 

        一个很小的浮点数值。(只读) 

        最小的浮点值,不同于0。 


Mathf.Infinity——正无穷

        表示正无穷,也就是无穷大,∞ (只读) 


Mathf.NegativeInfinity——负无穷 

        表示负无穷,也就是无穷小,-∞(只读) 


Mathf.InverseLerp(from,to,value)——反插值 

        计算两个值之间的Lerp参数。也就是value在from和to之间的比例值。


Mathf.Log10(f:float)——基数10的对数

        返回f的对数,基数为10。


Mathf.Log(f:float,p:float)——对数 

        返回以p为底f的对数。 


Mathf.Sign(f:float)——符号 

        返回 f 的符号。 


Mathf.SmoothDampAngle(

current :float,

target : float,

ref currentVelocity :float,

smoothTime : float,

maxSpeed : float = Mathf.Infinity,

deltaTime : float = Time.deltaTime)——平滑阻尼角度 

current——当前的位置。 
target——我们试图达到的位置。 
currentVelocity——当前速度,这个值在你访问这个函数的时候会被随时修改。 
smoothTime ——要到达目标位置的近似时间,实际到达目标时要快一些。 
maxSpeed——可选参数,允许你限制的最大速度。 
deltaTime——上次调用该函数到现在的时间。缺省为Time.deltaTime。 


随着时间的推移逐渐改变一个给定的角度到期望的角度。 
这个值通过一些弹簧减震器类似的功能被平滑。这个函数可以用来平滑任何一种值,位置,颜色,标量。最常见的是平滑一个跟随摄像机。 
//一个简单的平滑跟随摄像机 
//跟随目标的朝向 
public class example : MonoBehaviour { 
            publicTransform target; 
            publicfloat smooth = 0.3F; 
            publicfloat distance = 5.0F; 
            privatefloat yVelocity = 0.0F; 
            voidUpdate() { 
                        //从目前的y角度变换到目标y角度 
                        floatyAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, target.eulerAngles.y,ref yVelocity, smooth); 
                        //target的位置 
                        Vector3position = target.position; 
                        //然后,新角度之后的距离偏移 
                        position+= Quaternion.Euler(0, yAngle, 0) * new Vector3(0, 0, -distance); 
                        //应用位置 
                        transform.position= position; 
                        //看向目标 
                        transform.LookAt(target); 
            } 

 


Mathf.SmoothDamp(

current :float,

target : float,

ref currentVelocity : float,

smoothTime : float,

maxSpeed : float = Mathf.Infinity,

deltaTime : float = Time.deltaTime)——平滑阻尼 

current——当前的位置 
target——我们试图达到的位置。 
currentVelocity——当前速度,这个值在你访问这个函数的时候会被随时修改。 
smoothTime——要到达目标位置的近似时间,实际到达目标时要快一些。 
maxSpeed——可选参数,允许你限制的最大速度。 
deltaTime——上次调用该函数到现在的时间。缺省为Time.deltaTime。 

随着时间的推移逐渐改变一个值到期望值。 
这个值就像被一个不会崩溃的弹簧减振器一样被平滑。这个函数可以用来平滑任何类型的值,位置,颜色,标量。
public class example : MonoBehaviour { 
            publicTransform target; 
            publicfloat smoothTime = 0.3F; 
            privatefloat yVelocity = 0.0F; 
            voidUpdate() { 
                        floatnewPosition = Mathf.SmoothDamp(transform.position.y, target.position.y, refyVelocity, smoothTime); 
                        transform.position= new Vector3(transform.position.x, newPosition, transform.position.z); 
            } 

  • 29
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值