Mathf中的比较好玩或者方便的函数

Mathf.Infinity 正无穷大

Mathf.NegativeInfinity 负无穷大

Mathf.Abs 绝对值

int Abs(int value)
float Abs(float value)
这个不用多说,是计算并返回绝对值

Mathf.Ceil 最小整数(向上取整)

float Ceil(float value)
用来返回大于或者等于浮点数value的一个最小整数(注意:返回的是一个falot类型)

Mathf.CeilToInt 最小整数(向上取整)

int CeilToInt(float value)
和Ceil一样,只不过返回的是一个int类型

Mathf.Floor 最大整数(向下取整)

float Floor(float value)
用来返回小于或等于浮点数value的一个最大整数(注意:返回的是一个falot类型)

Mathf.FloorToInt 最大整数(向下取整)

float Floor(float value)
和Floor一样,只不过返回的是一个int类型

Mathf.Approximately 近似

bool Approximately(float a,float b)
比较两个浮点数是否相近
程序里面有时候会出现想将两个浮点数对比的情况,但是浮点数有可能因为精度问题不等,比如1f和1f/1f,有可能会出现1f==1f/1f位false的情况,所以用Approximately要保险一些。

Mathf.Epsilon 小正数

一个很小的浮点数值,但不同于0
规则:
- anyValue + Epsilon = anyValue 
- anyValue - Epsilon = anyValue 
- 0 + Epsilon = Epsilon
- 0 - Epsilon = -Epsilon 
有点像Approximately的偏差值
bool isEqual(float a, float b) { 
    if(a >= b - Mathf.Epsilon && a <= b + Mathf.Epsilon) 
        return true; 
    else 
        return false; 
}

Mathf.Clamp 限制数

int Clamp(int value ,int min ,int max)
float Clamp(float value,float min,float max)
返回限制在min和max中的数,比如min为0,max为1,如果value为2的话,返回的是1,如果value为-1的话返回的是0。只有当value为min和max之间才返回的是value。

Mathf.Clamp01 限制数在0和1之间

float Clamp(float value)
和Clamp一样,只不过自动将min设置为了0,max设置为了1。

Mathf.Deg2Rad 度转弧度常量

弧度=度*Mathf.Deg2Rad
其实就等于(PI * 2) / 360。

Mathf.Rad2Deg 弧度转度常量

度=弧度*Mathf.Rad2Deg 
其实就等于360 / (PI * 2)

Mathf.ClosestPowerOfTwo 最近的二次方数

int ClosestPowerOfTwo(int value)
返回距离value最近的2的次方数。
比如Mathf.ClosestPowerOfTwo(19)返回16,因为19离2的4次方最近,于是返回了2的4次方

Mathf.NextPowerOfTwo 下一个二次方数

int NextPowerOfTwo (int value)
返回距离value最近的下一个2的次方数。
比如Mathf.NextPowerOfTwo(7)返回8

Mathf.DeltaAngle 增量角

float DeltaAngle(float current,float target)
计算给定的两个角之间最短的差异。
比如Mathf.DeltaAngle(1080,90)就会输出90。

Mathf.IsPowerOfTwo 是否是2的幂

bool IsPowerOfTwo(int value)
返回value是否是2的几次方

Mathf.Lerp 插值

float Lerp(float from,float to,float t)
返回基于浮点数t返回from到to之间的插值,t要在0和1之间
如果t=0.5的话,就返回from和to的中间值

Mathf.Max 最大值

float Max(float a,float b)
float Max(params float[] values)
返回最大的值

Mathf.Min 最小值

float Min(float a,float b)
float Min(params float[] values)
返回最小的值

Mathf.MoveTowards 移向

float MoveTowards(float current,float target,float maxDelta)
是一个值向目标值靠近,速度不超过maxDelta,如果maxDelta为负的话将会将远离

Mathf.PingPong 乒乓

float PingPong(float t,float length)
在0到length之间往返。t值永远不大于length,也不会小于0。
由0到length再由length到0往返

Mathf.Repeat 重复

float Repeat(float t,float length)
和PingPong很像,只不过这个是从0到length之后再回到0再到length。

Mathf.Pow 次方

float Pow(float f,float p)
返回f的p次方

Mathf.Round 四舍五入

float Round(float f)
返回四舍五入值,但如果数字末尾为.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。

Mathf.RoundToInt四舍五入

int RoundToInt(float f)
换Round很像,只不过返回值为整数

Mathf.Sign 符号

float Sign(float f)
如果f为正或者为0,就返回1,如果为负就返回-1
<think>好的,用户想在Unity中使用Mathf实现一个从0到1循环的功能。首先,我需要回忆Mathf中有哪些函数可以实现周期性变化。常见的可能有Mathf.PingPong和Mathf.Repeat,不过它们的区别需要理清楚。 Mathf.PingPong函数会让数值在0到目标值之间来回摆动,比如时间乘以速度,随着时间增加,数值会在0和1之间来回。而Mathf.Repeat则是简单地取余数,数值会从0递增到目标值后突然回到0,这可能不符合用户想要的平滑循环。 所以用户应该使用Mathf.PingPong,配合Time.time来获取时间参数。例如,将Time.time乘以一个速度系数,然后作为参数传给PingPong,这样就能得到0到1之间的循环值了。 不过,用户可能需要调整速度,这时候可以引入一个变量控制速度,比如speed。公式可以写成Mathf.PingPong(Time.time * speed, 1)。这样调整speed就能改变循环的快慢。 另外,Mathf.Sin函数结合时间也可以实现类似的振荡效果,但需要将正弦函数的输出从-1到1映射到0到1,可能稍微复杂一点。但用户的问题明确提到从0到1循环,所以PingPong更直接。 还要考虑是否需要暂停或重置循环,这时候可能需要记录起始时间或者使用Time.timeSinceLevelLoad等不同的时间变量。但用户没有提到这些需求,所以基础实现应该足够。 最后,给出示例代码,并说明参数的作用,比如调整speed的值。这样用户可以直接复制使用,并根据需要修改。</think>在Unity中实现从0到1的循环运动,可以使用$Mathf.PingPong$函数结合时间参数。这个方法会以$[0,1]$区间为范围进行"乒乓式"数值往复。以下是实现步骤: ```csharp using UnityEngine; public class ValueLooper : MonoBehaviour { public float speed = 1.0f; void Update() { float value = Mathf.PingPong(Time.time * speed, 1); // 现在value会在0到1之间来回循环 Debug.Log(value); } } ``` **实现原理分析:** 1. $Time.time$获取游戏运行时间(秒) 2. 乘以$speed$控制循环速度 3. $Mathf.PingPong$的第二个参数1设定数值范围上限 4.函数会在$[0,1]$区间内自动进行往返运动 **进阶用法:** - 使用$Mathf.Sin$实现平滑循环: ```csharp float value = (Mathf.Sin(Time.time * speed) + 1) * 0.5f; ``` - 基于时间的循环公式: $$ value = \frac{\sin(2\pi t/T) + 1}{2} $$ 其中$T$是完整周期时长,$t$是当前时间[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值