- Home /
Camera Dampening
Heyo. I grabbed this Camera Movement script from the forums and got it working to my liking, but I was wondering if anybody could edit the script to add Camera dampening so that the character can outrun the camera but if he stops the camera catches up. I'm aware of the pointlessness of using others scripts, but I've done a lot on my own and this camera has some advanced functions that I haven't learned yet, but it does what I need it to. If anybody has an answer that adds dampening and can explain how they did it to me, it would be greatly appreciated.
var target : Transform;
var targetHeight = 2.0;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -40;
var yMaxLimit = 80;
var zoomRate = 20;
private var distance = 10;
private var rotationDampening = 2;
private var positionDampening = 1;
private var x = 0.0;
private var y = 0.0;
var isTalking:boolean = false;
var layerMask = 1 << 8;
layerMask = ~layerMask;
@script AddComponentMenu("Camera-Control/WoW Camera")
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 Update () {
if(!target)
return;
if(Input.GetAxis("Vertical") || Input.GetAxis("Horizontal")) {
var targetRotationAngle = target.eulerAngles.y;
var currentRotationAngle = transform.eulerAngles.y;
x = Mathf.LerpAngle(currentRotationAngle, targetRotationAngle, rotationDampening * Time.deltaTime);
}
y = ClampAngle(y, yMinLimit, yMaxLimit);
// ROTATE CAMERA:
var rotation:Quaternion = Quaternion.Euler(y, x, 0);
transform.rotation = rotation;
// POSITION CAMERA:
var position = target.position - (rotation * Vector3.forward * distance + Vector3(0,-targetHeight,0));
transform.position = position;
// IS VIEW BLOCKED?
var hit : RaycastHit;
var trueTargetPosition : Vector3 = target.transform.position - Vector3(0,-targetHeight,0);
// Cast the line to check:
if (Physics.Linecast (trueTargetPosition, transform.position, hit, layerMask)) {
// If so, shorten distance so camera is in front of object:
var tempDistance = Vector3.Distance (trueTargetPosition, hit.point) - 0.28;
// Finally, rePOSITION the CAMERA:
position = target.position - (rotation * Vector3.forward * tempDistance + Vector3(0,-targetHeight,0));
transform.position = position;
}
}
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);
}
Comment