Limit rotation when using RotateAround()

I’ve got a camera that is child to a pivot. The pivot rotates around its y-axis to circle the camera around a single point, while the camera uses RotateAround on the pivot’s z-axis to pitch up and down. I want to restrict the angle the camera can be at to between 10 and 80, but I keep getting a bug where it flips over the top (inverted) and will be stuck on that side. Here is the code:

float xChange = Input.GetAxis ("Mouse X") * Time.deltaTime * 200;
float yChange = Input.GetAxis ("Mouse Y") * Time.deltaTime * 200;

pivot.Rotate (Vector3.up * xChange);

if (myT.rotation.eulerAngles.x + yChange < 10)
    yChange = 10 - myT.rotation.eulerAngles.x;
if (myT.rotation.eulerAngles.x + yChange > 80)
    yChange = 80 - myT.rotation.eulerAngles.x;

myT.RotateAround(pivot.position, pivot.forward, -yChange);

I’ve tried a few other things but stuck with the two part systems for rotation and pitching. If anyone has a simpler, better idea, let me know. I’m just making a camera that rotates around a spot, looking at it and pitching, pretty common in games. Thanks!

I think your problem is similar to mine : My post about rotating an airplane in 2.5D

You should avoid using Euler angles most of the time because it’s unpredictable. Instead, create class variables to hold the rotations values and increment those. You can then test against your class variables instead of the eulerAngles

Also, use Quaternion.AngleAxis(angles, axis) to rotate around an axis like you would with Euler except it uses Quaternions and you don’t risk gimbal lock effect

To combine rotations you need to multiply them. I hope you can see clearly enough how to do this in the question I linked.