- Home /
Lerp/Slerp making the Camera get stuck,Lerp / Slerp getting stuck
I am trying to use Lerp / Slerp to move my camera (which is a child of a Car Prefab containing a RigidBody) from point A to point B and back to point A. I've tried using coroutines as well as Update Method to do so.
Here is the Coroutine
IEnumerator startSequence ()
{
Vector3 offset = new Vector3(0.02857f, 3.12307f, 2.4438f);
Vector3 startPosition = CollisionHandler.instance.collisionCam.transform.position;
Quaternion startRotation = CollisionHandler.instance.collisionCam.transform.rotation;
while (Vector3.Distance(CollisionHandler.instance.collisionCam.transform.position, targetPosition.transform.position + offset) > 0.05)
{
CollisionHandler.instance.collisionCam.transform.position = Vector3.Lerp(CollisionHandler.instance.transform.position, targetPosition.position + offset, 2 * Time.deltaTime);
CollisionHandler.instance.collisionCam.transform.rotation = Quaternion.Slerp(CollisionHandler.instance.transform.rotation, Quaternion.Euler(34, -180, 0), 2 * Time.deltaTime);
yield return null;
}
while (CollisionHandler.instance.collisionCam.transform.position != startPosition && CollisionHandler.instance.collisionCam.transform.rotation != startRotation)
{
CollisionHandler.instance.collisionCam.transform.position = Vector3.Lerp(targetPosition.position + offset, startPosition, 2 * Time.deltaTime);
CollisionHandler.instance.collisionCam.transform.rotation = Quaternion.Slerp(Quaternion.Euler(34, -180, 0), startRotation, 2 * Time.deltaTime);
yield return null;
}
startSequenceCheck = false; // A check which is used in another method after the camera has returned to it's original position
}
the coroutine doesn't seem to work at all, the camera moves a little and then gets stuck and jitters about the position
and here is the update method doing the same thing
private void Update()
{
if (startSequenceCheck1)
{
CollisionHandler.instance.collisionCam.transform.position = Vector3.Lerp(CollisionHandler.instance.collisionCam.transform.position, targetPosition.position + offset, 2 * Time.deltaTime);
CollisionHandler.instance.collisionCam.transform.rotation = Quaternion.Slerp(CollisionHandler.instance.collisionCam.transform.rotation, Quaternion.Euler(34, -180, 0), 2 * Time.deltaTime);
if (Vector3.Distance(CollisionHandler.instance.collisionCam.transform.position, targetPosition.transform.position + offset) > 0.05)
startSequenceCheck1 = true;
else
{
startSequenceCheck1 = false;
}
}
else
{
//CollisionHandler.instance.collisionCam.transform.position = Vector3.Lerp(targetPosition.position + offset , startPosition, 2 * Time.deltaTime);
CollisionHandler.instance.collisionCam.transform.rotation = Quaternion.Slerp(Quaternion.Euler(34, -180, 0), startRotation, 2 * Time.deltaTime);
if (Vector3.Distance(CollisionHandler.instance.collisionCam.transform.position, startPosition) > 0.05)
startSequenceCheck2 = true;
else
{
startSequenceCheck2 = false;
}
}
}
the update method on the other hand does run the first Lerp/Slerp and goes to the target position but then gets stuck and starts jittering about the position like the coroutine.
I've seen a similar post and the answer there was that the GameObject is a child of a RigidBody, my camera is also a child of a Car prefab which has a rigid body, but I've also tried it without the camera being a child of the Car and still get the same problem
also I am sorry if the code seems stupid I am basically a beginner in Unity
Your answer
Follow this Question
Related Questions
transformDirection for camera control 1 Answer
Sprinting camera shake 1 Answer
Distribute terrain in zones 3 Answers
Pinch zoom 1 Answer
Multiple Cars not working 1 Answer