Smooth Camera Rotation with Deceleration
I've been trying to find a solution to creating a camera deceleration when orbiting around a scene. For an application that I am developing for the IOS.
I have a make shift approach that uses the Lerp function but the transition is not smooth enough like some transitions that you see on native IOS application.
The example code is below:
void Update()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)// */ Input.GetMouseButton(0))
{
if (target)
{
CamOrbit();
}
}
if (Input.GetTouch(0).phase == TouchPhase.Ended) // */Input.GetMouseButtonUp(0))
{
InputX = Input.GetAxis("Mouse X");
InputY = -Input.GetAxis("Mouse Y");
isMoving = true;
current = 1;
}
}
}
void LateUpdate()
{
if (isMoving)
{
Quaternion rotation;
current += Time.deltaTime;
x += -InputX * xSpeed * 0.02f;
y += -InputY * ySpeed * 0.02f;
rotation = Quaternion.Euler(y, x, 0);
transform.rotation = Quaternion.Lerp(rotation, CamOrbit(), 100f * Time.deltaTime);
if (current > 1.2)
isMoving = false;
}
}
private Quaternion CamOrbit()
{
x += -Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= -Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
rotation = Quaternion.Euler(y, x, 0);
transform.rotation = rotation;
return rotation;
}
I tried using Slerp, but the effect was more or less the same, I know I might have used it in an incorrect way, But i do hope someone can shed some light on this.
Thanks, Shanaire.
Answer by Shanmf3d · Jan 31, 2018 at 10:10 AM
I came to a solution to this answer.
The Solution is as follows. Just if anyone else has a similar issue.
void Update()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)// */ Input.GetMouseButton(0))
{
if (target)
{
newRotation = CamOrbit();
}
}
}
}
void LateUpdate()
{
ApplyNewRotation(newRotation, Damping);
}
private Quaternion CamOrbit()
{
x += -Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= -Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
rotation = Quaternion.Euler(y, x, 0);
return rotation;
}
void ApplyNewRotation(Quaternion NewRotation, float Damping)
{
transform.rotation = Quaternion.Lerp(transform.rotation, NewRotation, Time.deltaTime * Damping);
}
Your answer
Follow this Question
Related Questions
Add Rotation from parent to Quaternion Child 1 Answer
Help with rotating camera around object based on mouse input 0 Answers
Creating a Window - Camera movement 0 Answers
Transform.Rotate x and y rotate z, where z is 0 0 Answers
Rotate Camera in Y axis without visibly changing angle in Z axis 2 Answers