- Home /
Question by
Pauls · Oct 04, 2013 at 04:56 PM ·
camerarotationrotatearoundeasing
easing camera rotation after mouse up?
Hi,
I would like to ease the rotation of the camera around a target after we drop the mouseclick, I have tried this code but there is nothing happening after we release the click, and when the values are really high, the camera moves after the drop, but only in one straight move. Would you know why?
Here is the code :
using UnityEngine;
public class CameraDrag : MonoBehaviour {
private Vector3 dragOrigin;
public float _speed = 0.05f;
public int easingSpeed = 1;
public Transform _target;
private bool buttonUp = false;
void Update(){
//DOWN
if (Input.GetMouseButtonDown(0)){
dragOrigin = Input.mousePosition;
buttonUp = false;
return;
}
//UP
if ( Input.GetMouseButtonUp(0) ) buttonUp = true;
if ( buttonUp ){
RotateObject(_target.position, Vector3.up, 10, easingSpeed);
}
//DRAG
if (!Input.GetMouseButton(0)) return;
else {
transform.LookAt(_target);
Vector3 pos = Input.mousePosition - dragOrigin;
transform.RotateAround(_target.position, Vector3.up, pos.x*_speed);
}
}
private void RotateObject( Vector3 point, Vector3 axis, float rotateAmount, float rotateTime ) {
float step = 0; //non-smoothed
float smoothStep = 0; //smoothed
float lastStep = 0; //smooth step last time
float rate = 1 / rotateTime; //amount to increase non-smooth step by
while( step < 1 ) { // until we're done
step += Time.deltaTime * rate; //increase the step
smoothStep = Mathf.SmoothStep(0, 1, step); //get the smooth step
transform.RotateAround( point, axis, rotateAmount * (smoothStep - lastStep) );
lastStep = smoothStep; //store the smooth step
//yield return;
}
//finish any left-over
if(step > 1) {
transform.RotateAround( point, axis, rotateAmount * (1 - lastStep) );
buttonUp = false;
}
}//#
}//#class
(source: the code is from this thread : http://answers.unity3d.com/questions/29110/easing-a-rotation-of-rotate-around.html )
Thanks
Comment