# I can't figure out how to clamp it

I can’t figure out how to clamp my camera rotation.

``````    float CurY = Input.GetAxisRaw("Mouse X");
Vector3 RotateY = new Vector3(0f, CurY, 0f) * TurnSpeed;

float CurX = Input.GetAxisRaw("Mouse Y");

Vector3 RotateX = new Vector3(CurX, 0f, 0f) * TurnSpeed;

var cam = Cam.transform.rotation;

transform.Rotate(RotateY);
Cam.transform.Rotate(-RotateX);

cam.x = Mathf.Clamp(cam.x, -AngleLimit, AngleLimit);
``````

You’re hitting 2 problems:

• you are reading the camera rotation (line 8), but not writing it back to the camera (line 12 just modifies the value you read)
• even if you were reading/writing it, the ‘rotation’ value is a quaternion. I think you’re probably thinking about the eulerAngles property as in the previous answer. However you’d still need to write it back.

I would try something like this:

``````     Vector3 RotateX = new Vector3(CurX, 0f, 0f) * TurnSpeed;
transform.Rotate(RotateY);
Cam.transform.Rotate(-RotateX);

Vector3 cam_rotation = Cam.transform.eulerAngles;
cam_rotation.x = Mathf.Clamp(cam_rotation.x, -AngleLimit, AngleLimit);
Cam.transform.eulerAngles = cam_rotation;
``````

As an extra note, simply clamping angles doesn’t always yield the expected result, and I can’t tell what that is from your code. However what I’ve provided above should certainly limit the value that the x component of the camera’s eulerAngles property can take on.

cam is in fact Quaternion. Probably what you intended to do was cam.eulerAngles.x