- Home /

# Return camera to start position smoothly

Sorry this is such a nooby question. How would I rotate back to the default rotation smoothly when I release the mouse button? I can use rotating around and rotating smoothly, but I don't know how to do both. This is the code:

```
using UnityEngine;
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse drag Orbit with zoom")]
public class MouseOrbitImproved : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float xSpeed = 120.0f;
public float ySpeed = 120.0f;
public float yMinLimit = -20f;
public float yMaxLimit = 80f;
public float distanceMin = .5f;
public float distanceMax = 15f;
public float smoothTime = 2f;
float rotationYAxis = 0.0f;
float rotationXAxis = 0.0f;
float velocityX = 0.0f;
float velocityY = 0.0f;
public Vector3 startpos;
// Use this for initialization
void Start()
{
startpos = transform.position;
Vector3 angles = transform.eulerAngles;
rotationYAxis = angles.y;
rotationXAxis = angles.x;
// Make the rigid body not change rotation
if (GetComponent<Rigidbody>())
{
GetComponent<Rigidbody>().freezeRotation = true;
}
}
void LateUpdate()
{
if (target)
{
if (Input.GetMouseButton(0))
{
velocityX += xSpeed * Input.GetAxis("Mouse X") * distance * 0.02f;
velocityY += ySpeed * Input.GetAxis("Mouse Y") * 0.02f;
}
rotationYAxis += velocityX;
rotationXAxis -= velocityY;
rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);
Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0);
Quaternion toRotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);
Quaternion rotation = toRotation;
distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel") * 5, distanceMin, distanceMax);
RaycastHit hit;
if (Physics.Linecast(target.position, transform.position, out hit))
{
distance -= hit.distance;
}
Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
Vector3 position = rotation * negDistance + target.position;
transform.rotation = rotation;
transform.position = position;
velocityX = Mathf.Lerp(velocityX, 0, Time.deltaTime * smoothTime);
velocityY = Mathf.Lerp(velocityY, 0, Time.deltaTime * smoothTime);
}
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
```

Thanks, any help is appreciated.

**Answer** by Kossuranta
·
Apr 03, 2017 at 11:30 AM

Save original rotation

Create new float t

Set value of t to 0 on Input.GetMouseButtonUp(0)

On !Input.GetMouseButton(0) then t += Time.deltaTime

Also on !Input.GetMouseButton(0) lerp rotation back to original rotation:

.

```
transform.rotation = Quaternion.Lerp(transform.rotation, origRot, t * speed);
```

This will slowdown when rotation is getting closer to original. If you want rotation speed to be constant, then also save transforms current rotation on Input.GetMouseButtonUp(0). And use code like this:

```
transform.rotation = Quaternion.Lerp(curRot, origRot, t * speed);
```

If the rotation doesn't look good you can change Lerp to Slerp, which is slower but might look better.

Thank you so much for the reply. I have tried this, but don't understand, how do I get the start rotation? (I have tried startRot = transform;) sorry I'm such a noob.

@VeeooshL you can get rotation by simply writing this " Quaternion startRot = transform.rotation "

I have tried this, and it works really well, but does not account for the position of the camera, as it orbits an object. when I release the mouse button, it rotates smoothly back to the direction it was facing, but does not rotate around my target. :( thanks so much though.

### Your answer

### Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.

### Follow this Question

### Related Questions

How can I limit my rotation around an object ? 1 Answer

maximum angle for camera 0 Answers

Unexpected Camera Rotation 0 Answers

Smooth camera rotation velocity. 0 Answers

Smooth Rotation Help 1 Answer