Unity平滑函数Lerp简单介绍

首先简单举例几个适用情况呐。

A:物体从a-b,如何平滑的到达b点

B:物体旋转90,如何平滑

首先按照情况先给答案后续进行解析为什么:

void Awake()
    {

        StartCoroutine(RotateCam());
    }

IEnumerator RotateCam()
    {
        while(gameObject.transform.rotation!=qu)
        {
            yield return new WaitForFixedUpdate();//帧执行
            //这是旋转
            //首先通过该记录1我们的目标位置
            qu = gameObject.transform.rotation * Quaternion.AngleAxis(angle, Vector3.up);
            
            gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, qu, 0.1f); 
            //这是位移
            mainCam.transform.position = Vector3.Lerp(mainCam.transform.position, offset + player.transform.position, 0.1f);
        }
    }

lerp主要有三个参数(常用)

lerp(start , end , OneExecutePer )

start:初始状态

end:目标状态

OneExecutePer:每一次执行靠近的度是多少(如果是1,也就是说执行一次就会达到目标)

如果是0.5,第一次执行就会完成1/2的路程,因为start和end靠近了1/2的路程,所以下一次执行就会靠近1/4(他们的距离变短了一半),简单说每次只走我们距离的一半。

以后的数据就是1/8,1/16。。。

这么来说是达不到最终目的地的(理想状态下),当无限靠近的过程中因为精度比如float只有六位小数,当差距小于这个的时候就会停止调用。、

使用携程有一个坏处如果在运行过程中又被调用了,他前面的会被刷新,导致前面的没有执行完成。

猜你喜欢

转载自blog.csdn.net/fairen/article/details/118814592