Smooth camera not really smooth

hello, i have this camera following my car in my project, it should be smooth, tho when you see it turning it seems like the camera is lagging..

i have a example here:

http://lysdal.org/s-dev/unity3d/test.html

the controls are:

a - forward

s - backward

a / d - turning

space - brake

Thanks in advance,

Soren

@AquaGeneral sure, its in the standard assets, here:

/*
This camera smoothes out rotation around the y-axis and height.
Horizontal Distance to the target is always fixed.

There are many different ways to smooth the rotation but doing it this way gives you a lot of control over how the camera behaves.

For every of those smoothed values we calculate the wanted value and the current value.
Then we smooth it using the Lerp function.
Then we apply the smoothed values to the transform's position.
*/

// The target we are following
var target : Transform;
// The distance in the x-z plane to the target
var distance = 10.0;
// the height we want the camera to be above the target
var height = 5.0;
// How much we 
var heightDamping = 2.0;
var rotationDamping = 3.0;

// Place the script in the Camera-Control group in the component menu
@script AddComponentMenu("Camera-Control/Smooth Follow")

function Update () {
	// Early out if we don't have a target
	if (!target)
		return;

	// Calculate the current rotation angles
	wantedRotationAngle = target.eulerAngles.y;
	wantedHeight = target.position.y + height;

	currentRotationAngle = transform.eulerAngles.y;
	currentHeight = transform.position.y;

	// Damp the rotation around the y-axis
	currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);

	// Damp the height
	currentHeight = Mathf.Lerp (currentHeight, wantedHeight, heightDamping * Time.deltaTime);

	// Convert the angle into a rotation
	currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);

	// Set the position of the camera on the x-z plane to:
	// distance meters behind the target
	transform.position = target.position;
	transform.position -= currentRotation * Vector3.forward * distance;

	// Set the height of the camera
	transform.position.y = currentHeight;

	// Always look at the target
	transform.LookAt (target);
}

Edit: i tried changing the size, it didnt work :/

Hi, I had a similar problem. Tried Damping, Lerping aso and it always lagged. Finally it worked after I put all my camera lerping and damping code into the fixedupdate...

I can see what you mean however I can't quite figure out the problem without looking at the camera script. Could you post it?

Edit: Ah, I didn't realize you meant the standard assets smooth camera script.

I recall having a few problems with this in the past. I am not sure entirely what I did to fix it up. But I do recall lowering the scale of the scene, which is probably when the problem went away.

A quick way of finding out if that's the problem or not is just lowering the scale of the car, and see if that helps.

Edit 2: Is the target of the camera a rigidbody by any chance? Here are some things to try if that's the case:

  • Raise the Solver Iteration Count in the Physics Manager.
  • Lower the Time Scale in the Time Manager. It might be a temporary fix.
  • Lower the Fixed Timestep in the Time Manager. Another potential yet temporary fix.

I changed the 'LateUpdate' function in the SmoothCamera script to 'FixedUpdate', that seems to solve the lag.

Guys the hole purpose of this script is create a lag effect. If you don’t want the lag then increase the damping values to match your requirement.

var heightDamping = 2.0;
var rotationDamping = 3.0;

Note :- Going for FixedUpdate is like finding solution but not the problem. FixUpdate affect Time.deltaTime property that’s why it is not damping inside.

Thanks this FixedTimeStep fixed it for me to. Now I have smooth fallowing arms.:slight_smile:

Thanks you @Moki, and @AquaGeneral , i have similar problem then i change LateUpdate to FixedUpdate and decrease Fixed Timestep now work perfectly