Unity 插值运算Lerp应用

好久没更新了,前一段时间比较划…最近正好看了siki学院的秘密行动的课程,发现插值运算真的是非常好用的一个函数,所以就想记录一下使用

一.什么是插值(Lerp)

百度百科了一下插值的定义

简单来说插值可以方便我们对某个参数控制更加流畅,当参数趋向于某个值时是有一条弧线的,而不是直接改变其值为目标值。

二.Unity中的插值方法

用的最多的就是Mathf.Lerp()这个方法,可以看下官方定义

其实意思是差不多的 就稍微讲下Mathf.Lerp(float a,float b,float t)里的各各参数吧

a:需要渐进变换的参数
b:峰顶值
c变化速率 一般都在Update中使用的话可以设置为 Time.deltatime*changeSpeed (changeSpeed可以自行定义大小来控制)

我们再来看下实际应用中的(截选)


    float h = Input.GetAxis("Horizontal");
    float v = Input.GetAxis("Vertical");

        if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1)
        {
            float newSpeed=Mathf.Lerp(anim.GetFloat("speed"), 5.6f, increaseSpeed * Time.deltaTime);
            anim.SetFloat("speed", newSpeed);

            Vector3 targetDir = new Vector3(h, 0, v);
            Quaternion newRotation = Quaternion.LookRotation(targetDir, Vector3.up);
            transform.rotation= Quaternion.Lerp(transform.rotation, newRotation, rotatedSpeed * Time.deltaTime);
        }

我们这里通过插值运算对于人物的移动和旋转进行了改变,速度的插值运算使我们更加流畅进行速度转变(有了一个渐变的过程)
后面的Quaternion.Lerp()是四元数的插值运算,用法雷同,对旋转进行插值运算控制。

三.总结

插值运算的使用让我们对某些参数的转变更加细腻,不那么生硬的类似线性变化那种感觉,Unity中许多地方的转变都可以运用到插值运算Mathf.Lerp(),Vector3.Lerp(),Quaternion.Lerp()等等都是常用的插值运算方法,熟练使用插值运算可以对一些细节更加优化!

猜你喜欢

转载自blog.csdn.net/wangjianxin97/article/details/83512446
今日推荐