- Home /
Making my camera script snap back to original position
Me and my friend are making a space game and we want a camera script so that when you hold left mouse button you can look around the ship the code i used was:
var lookDirection = 0;
var camRotLeft = false; // object rotates left if true
var camRotRight = false; // object rotates right if true;
var target : Transform;
var distance = 10.0;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -360;
var yMaxLimit = 360;
private var x = 0.0;
private var y = 0.0;
@script AddComponentMenu("Camera-Control/Mouse Orbit")
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 OnGUI(){
camRotLeft = GUI.Button(Rect(390,530,60,20), "-90°");
camRotRight = GUI.Button(Rect(390,560,60,20), "+90°");
}
function Update () {
if (camRotLeft && lookDirection >= 90)
lookDirection -= 90;
else if(camRotLeft)
lookDirection = 270;
if (camRotRight && lookDirection <= 270)
lookDirection += 90;
else if(camRotRight)
lookDirection = 90;
if (target && Input.GetMouseButton(0)) {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, lookDirection);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
function repositionCameraNoMouse() {
if (target) {
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
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);
}
My problem is that we want the camera to snap back to it's original position because the camera stays where you left it after letting go of the left mouse button (This makes it hard to move the camera back manually) So do any of you coders out there know how i could make the camera snap to it's original position after letting go of the left mouse button?
Thanks :D
Answer by robertbu · Feb 12, 2013 at 03:14 PM
If you mean by snap, you mean instant:
Declare a variable at the top of the script:
private var qOrg : Quaternion;
In Update()
if (Input.GetMouseButtonDown())
qOrg = transform.rotation;
if (Input.GetMouseButtonUp())
transform.rotation = qOrg;
If you mean over time, then it gets more complicated and will have to be integrated into your current logic with a Lerp() or MoveTowards().
Your answer
Follow this Question
Related Questions
Gyroscope Orbit Android 1 Answer
orbit mouse camera animation movement script 1 Answer
Rotate camera outside of movement lerp? 0 Answers