Camera Follow cannot track player in freefall due to lerp()


I’m trying to make a 2d character controller with a camera follow script that uses Vector3.Lerp to follow the player over “deltaTime * dampening”. The issue is that during freefall, at one point, the camera will not be able to keep up with the player.
Can the lerp be restricted to a max delay?

My code:

transform.position = Vector3.Lerp (transform.position, newPosition, Time.deltaTime * damping);


There are two options here:

  1. Increase the value of damping , if you’re set it as a value and aren’t changing it. The higher the dampening value, the more closely the camera will follow.

  2. The “better” way would be to determine the downward velocity of your character:

    float cameraCatchup = 0.0f;
    float cameraCatchupSpeed = 10.0f;
    // If the player is falling …
    if ( playerObject.rigidbody.velocity.y < 0.0f )
    cameraCatchup = rigidbody.velocity.y / cameraCatchupSpeed ;
    cameraCatchup = 0.0f;
    transform.position = Vector3.Lerp ( transform.position, newPosition, Time.deltaTime * (damping + cameraCatchup) );

That’ll add a cameraCatchup amount to your damping value. The cameraCathcupSpeed is used because the value of rigidbody.velocity.y will likely be way too high, causing the camera to snap to the character. You may also only want the camera to catchup if the player starts falling faster than a certain speed too.