Unity Mathf的一些函数

1 Mathf.Lerp(float a,float b,float t)

1.1 官方给出的解释为:用t在a和b之间做线性差值;参数t限制在0到1之间,当t=0时返回值为a,当t=1时返回值为b,当t为0.5时返回值为a到b的中间点。

1.2 应用:(因为该函数有三个变量,所以有好几种应用方式)

    1.2.1 做线性差值变化:

    float a = 0f;
    float b = 4.5f;
    private void Update()
    {
        a = Mathf.Lerp(a, b, Time.deltaTime);//a的值由快变慢线性地无线接近b的值
    }

    1.2.2 做匀速变化:

    float a = 0f;
    float b = 4.5f;
    float c = 0f;
    private void Update()
    {
        c += Mathf.Lerp(a, b, Time.deltaTime);//
    }

    1.2.3其他Lerp函数:

         Color.Lerp() 颜色的线性插值变化;

         Material.Lerp()材质的线性插值变化:经过测试,材质的变化并不能运用与两种不同材质之间;只适用于材质颜色、亮度、透明度等微小的细节变化;

    1.2.4可以搭配其他函数如Time.time、Mathf.Lerp等函数做出各种各样的运动;

2 Mathf.InverseLerp(float a,float b,float value)

  2.1 官方解释:与lerp正好相反,该函数是计算出value值在a到b之间(所占比例)的参数;

  2.2 例如:Mathf.InverseLerp(0,10,1)的返回值是0.1;

  2.3 应用:可以搭配其他函数活用:

   float a = 0f;
    float b = 4.5f;
    float c = 0f;
    private void Update()
    {
        c = Mathf.Lerp(a, b, Mathf.InverseLerp(a, b, a + Time.time));//随着时间的推移,c不断从a到b增值;
    }

3 Mathf.PingPong(float t,float value)

    3.1 官方解释:返回的值将在0到value之间移动;

           经过测试:如果t为固定值,返回值不变为这个固定值;

    3.2 例子:

          Mathf.PingPong(0,5f);返回值一直为0;

          Mathf.PingPong(Time.time,5f);返回值为从0到5之间不断变化;

    3.3 应用:

              float a = 0f;
    float b = 4.5f;
    float c = 0f;
    private void Update()
    {
        c = Mathf.Lerp(a, b, Mathf.InverseLerp(a, b, a + Mathf.PingPong(Time.time,b-a)));//随着时间的推移,c不断从a到b来回运动;
    }

 

 

 

 

 

 

 

上一篇:Unity中3D人物移动的逻辑分析。


下一篇:JS_0044:随机生成0到x,x到y 的随机数,float插值,坐标插值