【基础】Unity的Lerp,Slerp,SmoothDamp的介绍与应用

1.Lerp

介绍:

lerp的三个参数分别为 a, b, t

在 a 与 b 之间返回以 t 为百分比的插值。

float result = Mathf.Lerp(0, 10, 0.1f)

则 result 的值为 (10 - 0)* 0.1 = 1 

如果将 result 的值作为 a 传进去,如:

    private float result;

    private void Update()
    {
        Debug.Log(result);
        result = Mathf.Lerp(result, 10, 0.5f);
    }

其输出的值为 5, 7.5, 8.75, 9.375......10

可见其原理有点类似于二分,即:

API:

 

 应用:

需要直线移动、简单过渡时,如 UI 动画、颜色渐变等。

2.Slerp

介绍:

其性质与 Lerp 类似,不过它是球面线性插值,可直接理解为它专门服务于四元素、欧拉角的操作,即与旋转相关。

    private Vector3 result;
    public Transform target;

    private void Update()
    {
        result = Vector3.Slerp(result, target.eulerAngles, 0.1f);
    }

API:

应用:

需要在两个方向之间进行平滑旋转时,如人物旋转等

3.SmoothDamp

SmoothDamp使用了一种称为“阻尼”(damping)的技术,通过逐步调整当前向量,使其平滑地接近目标向量。像Lerp会一直根据 t 这个不变的值作为“速度”,而SmoothDamp的“速度”是会变化的,类似于加上了刹车效果。

参数:

current当前位置。
target尝试达到的目标。
currentVelocity当前速度,此值由函数在每次调用时进行修改。
smoothTime达到目标所需的近似时间。值越小,达到目标的速度越快。
maxSpeed可以选择允许限制最大速度。
deltaTime自上次调用此函数以来的时间。默认情况下为 Time.deltaTime。

 

 

因为其原理过于复杂,咋们只要会用就行。

    private Vector3 result;
    public Transform target;

    //表示当前速度
    private Vector3 velocity;

    private void Update()
    {
        result = Vector3.SmoothDamp(result, target.position, ref velocity, 0.1f);
    }

API:

应用:

需要平滑移动时,如相机跟随,动画过渡,物理模拟等

4.LerpUnclamped与SlerpUnclamped

非牵制性的线性差值。

可直接这样理解,Lerp和Slerp的  0 <= t <= 1 ,且其返回值不会大于b,而 t 可随便取值, 其返回值可大于 b。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值