从变量命名和大量的 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)));
        }