Rotate Camera around fixed point in specified increments (Bonus: How could I lerp this?)
So recently I've been starting to make a prototype for an Isometric 3rd Person game. What I would like to do with the camera is to have it rotate around the center of the level in increments of 90 degrees when the user hits a button (One for left rotation, another for right). I've been able to come up with a script that changes rotation when the user hits inputs "Rotate Left" and "Rotate Right", however, I'm stuck with stopping the camera from orbiting around the object when it reaches an increment of 90. Below is the code I've come up with so far, notated to the best of my ability.
using UnityEngine;
using System.Collections;
public class FixedCameraMovement: MonoBehaviour
{
public Transform target;
private int rotDir = 1; //Direction of rotation
private bool doRot = false;
private Vector3 offset = new Vector3(0, 1.5f, 0); //Offset for camera
private Vector3 relativePos;
private Quaternion rotation;
public float radius = 5;
void Update()
{
if (Input.GetButtonDown("Rotate Left"))
{
rotDir = 1;
doRot = true;
}
if (Input.GetButtonDown("Rotate Right"))
{
rotDir = -1;
doRot = true;
}
if (doRot)
{
relativePos = (target.position + offset) - transform.position;
rotation = Quaternion.LookRotation(relativePos);
//Created switch case here to change the Quaternion.LookRotation
// to rotate with the z-axis facing toward the object instead of the x-axis
switch (rotDir)
{
case (-1):
rotation *= Quaternion.FromToRotation(Vector3.forward, Vector3.right);
break;
case (1):
rotation *= Quaternion.FromToRotation(Vector3.right, Vector3.forward);
break;
}
Quaternion current = transform.localRotation;
transform.rotation = Quaternion.Slerp(current, rotation, Time.deltaTime);
transform.Translate(rotDir * radius * Time.deltaTime, 0, 0);
if (transform.localEulerAngles.y % 90 == 0)
{
doRot = false;
}
}
}
}
While this isn't really part of the issue, I'm also interested in changing the translation of the camera to ease in and out. I know that this would use some sort of code like such (Where "t" is the time/speed):
t = t*t * (3f - 2f*t)
However, I'm not too sure on how I would properly implement this into my code.
If anybody has any advice or suggestions one what to do, it would be greatly appreciated!
Your answer
Follow this Question
Related Questions
Addforce to Z axis rotation via touch input/ mobile 0 Answers
How to modify this script to not rotate the camera when I rotate the player. 1 Answer
Problem with rotating camera around player 1 Answer
Character controller with Animation for the Camera Controller 5.5.1(third person) 3D 0 Answers
How to make camera rotate spherically around an object 0 Answers