- Home /
Camera leaning problems (Lerping)
I made a script that makes the camera lean (Directly inside the Camera Script). The rotation of leaning is fine, but when i come to lerp the camera, it seems as though it has a desired time to reach a certain position in a certain amount of seconds, which leads to the player being able to move faster than the camera. Now i do not like nesting the camera in the player, as it is a bad practice and can lead to camera streches when it rotates. I have put 2 gameobjects inside the player, and named them LeanLeft / LeanRight and positioned them to where targetPosition (camera holder basically, but it doesnt actually hold the camera, the camera moves to it). Then i pressed play, and noticed my player sounded ahead of my camera. I went into scene view, and sure enough, the player was ahead of the camera. Now i realised that when i did the lerping the camera never reached is main destination fast enough, then the other destination. I do not know how to fix it because it is super confusing, so maybe someone else can help me. here's the code below.
if (Input.GetAxis("Vertical") < 0f || Input.GetAxis("Horizontal") < 0f || Input.GetAxis("Horizontal") > 0f || Input.GetAxis("Vertical") > 0f)
{
Vector3 tempTargetPos = new Vector3();
// Camera lerping does not work.
// Since we are lerping the camera, while we need to get to x as fast as b, while still lerping towards c, things get complicated.
// For example, targetPosition is able to move faster than the camera, which is never good.
// And since we NEED to lerp towards our lean transform, i do not know what to do.
if (Input.GetAxis("LeanLeft") > 0)
{
tempTargetPos = Vector3.Lerp(transform.localPosition, LeanLeftTransform.position, 0.1f);
}
else if (Input.GetAxis("LeanRight") > 0)
{
tempTargetPos = Vector3.Lerp(transform.localPosition, LeanRightTransform.position, 0.1f);
}
else
{
tempTargetPos = Vector3.Lerp(transform.localPosition, targetPosition.position, 0.1f);
}
tempPos = tempTargetPos; // + trans; Ignore trans (it's for headbob)
// AddOffsetRotation(trans * 10); Rotation, also ignore this
transform.position = tempPos; // Moving towards, Position
}
else if (Input.GetAxis("Vertical") == 0f || Input.GetAxis("Horizontal") == 0f)
{
// lean left is Q, lean right is E.
if (Input.GetAxis("LeanLeft") > 0)
{
transform.position = Vector3.Lerp(transform.localPosition, LeanLeftTransform.position, 0.1f);
}
else if (Input.GetAxis("LeanRight") > 0)
{
transform.position = Vector3.Lerp(transform.localPosition, LeanRightTransform.position, 0.1f);
}
else
{
transform.position = Vector3.Lerp(transform.localPosition, targetPosition.position, 0.1f);
}
}
Your answer
Follow this Question
Related Questions
Rotate camera a set amount of degrees around Player 0 Answers
smooth Camera Follow On Y Axis Only !!Please HELP!! 1 Answer
Make a camera to Follow two players 2 Answers
Trying to follow tutorial to set up Multiplayer camera follow on UNET... and it goes wrong. 0 Answers
FPS cam for Roll -a-Ball like game 1 Answer