- Home /
Camera Follow cannot track player in freefall due to lerp()
Hello,
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);
Thanks
Answer by VOTRUBEC · Feb 10, 2015 at 12:47 AM
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 ;
else
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.
The higher the dampening value, the more closely the camera will follow
Up to a maximum of Time.deltaTime * damping = 1
Your answer
Follow this Question
Related Questions
How to spawn evenly spaced game objects and move them in a circular path? 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
An NPC "moonwalks" 2 Answers
lerping transform.position on a camera 0 Answers