So I am trying to make a rail shooter game however I want the camera to always move left or right around the player when the left or right key is pressed. at the moment I am using a rotation on a pivot to determine the camera’s position. However, when using the Y-axis and rotating the pivot up, it makes the camera move in a diagonal orbit instead of left to right. How would I be able to set up a system so the camera only moves left and right on the pivot but not diagonal?
Here is my code:
public GameObject target;
public float rotateSpeed = 5;
public float minConstraintsX, maxConstraintsX;
Vector3 offset;
void Start()
{
offset = target.transform.position - transform.position;
}
void LateUpdate()
{
float horizontal = Input.GetAxis("Horizontal") * rotateSpeed;
float vertical = Input.GetAxis("Vertical") * rotateSpeed;
target.transform.Rotate(0, horizontal, 0, Space.Self);
target.transform.rotation = ClampRotationAroundXAxis(target.transform.rotation);
target.transform.Rotate(vertical, 0, 0);
float desiredAngleY = target.transform.eulerAngles.y;
float desiredAngleX = target.transform.eulerAngles.x;
Quaternion rotation = Quaternion.Euler(desiredAngleX, desiredAngleY, 0);
transform.position = target.transform.position - (rotation * offset);
transform.LookAt(target.transform);
}
Quaternion ClampRotationAroundXAxis(Quaternion q)
{
q.x /= q.w;
q.y /= q.w;
q.z /= q.w;
q.w = 1.0f;
float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan(q.x);
angleX = Mathf.Clamp(angleX, minConstraintsX, maxConstraintsX);
q.x = Mathf.Tan(0.5f * Mathf.Deg2Rad * angleX);
return q;
}
Thanks in advance