使用Mathf.SmoothDamp加速浮动而不是减速-Unity 3D

时间:2019-06-25 21:02:13

标签: c# unity3d

我正在使用Mathf.SmoothDamp降低我的浮动速度,我成功了!但是我不知道如何加快这个浮标的值,我现在只想在一开始就缓慢地加速并达到最大速度极限,作为现实生活中的加速效果,汽车等!有人有什么想法吗?

Mathf.SmoothDamp使用的代码:

float speed, velocity;

void Update(){
      //Used successfully to slow down
      speed = Mathf.SmoothDamp(speed , 20f, ref velocity, 5f);
}

1 个答案:

答案 0 :(得分:1)

我们可以简化夸脱功能,并且可以将输入反向钳位在0和1之间(也可以钳制输出):

public float EaseInQuart(float t) {
    return Mathf.Pow(Mathf.Clamp01(t),4f);
}

public float InverseEaseInQuart(float x) {
    return Mathf.Pow(Mathf.Clamp01(x),0.25f);
}

现在,我们可以采用当前速度,将其除以最大速度即可得出x项。

使用InverseEaseInQuart方法将其转换为线性t项,我们可以按deltaTime进行缩放,并按某个acceleration值进行缩放。

然后,我们使用EaseInQuart转换回x,然后再次将其乘以最大速度,以得到新的当前速度。

总的来说,可以这样写:

public float maxSpeed = 25f;
public float speed = 0f;
public float acceleration = 0.1f; // (0 to maxSpeed in 10 seconds)

public float EaseInQuart(float t) {
    return Mathf.Pow(Mathf.Clamp01(t),4f);
}

public float InverseEaseInQuart(float x) {
    return Mathf.Pow(Mathf.Clamp01(x),0.25f);
}

void Update(){ 
    float x = speed / maxSpeed;

    float t = InverseEaseInQuart(x);

    t += Time.deltaTime * acceleration;

    x = EaseInQuart(t);

    speed = x * maxSpeed;
}