从变量命名和大量的 goto 语句可以看出,Mathf 类的大部分源码看似是自动生成的,也可能是反编译工具处理后的结果。
1. Repeat
public static float Repeat(float t, float length)
{
return (t - (Floor(t / length) * length));
}
大部分情况下可以用整除 % 替代(C# 的整除运算符支持 float 和 double)。
2. Clamp
public static int Clamp(int value, int min, int max)
{
if (value >= min)
{
goto Label_000F;
}
value = min;
goto Label_0019;
Label_000F:
if (value <= max)
{
goto Label_0019;
}
value = max;
Label_0019:
return value;
}
3. Lerp
Linearly interpolates between a and b by t.
public static float Lerp(float a, float b, float t)
{
return (a + ((b - a) * Clamp01(t)));
}