- Home /
Smooth Mouse Orbit
Smooth mouse orbit like the default smooth lookat and follow. How is this done?
Answer by Jean-Fabre · May 17, 2011 at 05:26 AM
Hi,
One way to go about this is to use the smoothDamp system instead of injecting directly the movement to the camera.
Here is a working example:
var target : Transform; var distance = 10.0;
var xSpeed = 250.0; var ySpeed = 120.0;
var yMinLimit = -20; var yMaxLimit = 80;
private var x = 0.0; private var y = 0.0;
var smoothTime = 0.3;
private var xSmooth = 0.0; private var ySmooth = 0.0; private var xVelocity = 0.0; private var yVelocity = 0.0;
private var posSmooth = Vector3.zero; private var posVelocity = Vector3.zero;
@script AddComponentMenu("Camera-Control/Mouse Orbit smoothed")
function Start () { var angles = transform.eulerAngles; x = angles.y; y = angles.x;
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function LateUpdate () { if (target) { x += Input.GetAxis("Mouse X") xSpeed 0.02; y -= Input.GetAxis("Mouse Y") ySpeed 0.02;
xSmooth = Mathf.SmoothDamp(xSmooth, x, xVelocity, smoothTime);
ySmooth = Mathf.SmoothDamp(ySmooth, y, yVelocity, smoothTime);
ySmooth = ClampAngle(ySmooth, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(ySmooth, xSmooth, 0);
// posSmooth = Vector3.SmoothDamp(posSmooth,target.position,posVelocity,smoothTime);
posSmooth = target.position; // no follow smoothing
transform.rotation = rotation;
transform.position = rotation * Vector3(0.0, 0.0, -distance) + posSmooth;
}
}
static function ClampAngle (angle : float, min : float, max : float) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp (angle, min, max); }
Now, the camera smoothly follows the target and also smoothly rotates around.
Comments on how to do this better or more efficiently are welcomed :)
Bye,
Jean
Excellent! Where is the camera position affected in the script? I want to remove the smoothing on the follow.
in a rush, quickly editing and fixed. But will double check in a couple of hours.
Your answer
Follow this Question
Related Questions
Camera orbit around clicked position 0 Answers
Trouble with moving the camera. 2 Answers
Is it possible to add zoom to the mouse orbit script? 2 Answers
Smooth Camera Movement script with problem. 0 Answers
2d Spaceship smooth mouse movement 0 Answers