Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice
  2. Ever participated in one our Game Jams? Want pointers on your project? Our Evangelists will be available on Friday to give feedback. Come share your games with us!
    Dismiss Notice

Clamp orbit camera rotation

Discussion in 'Scripting' started by Demdem, May 19, 2019.

  1. Demdem


    Jun 2, 2017
    Working on mobile, I want to move the camera using touch slide and pinch around a target. For now everything is working well, I can move the camera around the object and zoom in or out. there is the code used to move the cam around:
    Code (CSharp):
    1. //touchMagnitude is touch position delta, get the angle rotation over axis
    2.       Quaternion camTurn = Quaternion.AngleAxis(touchMagnitude.x, Vector3.up);
    3.       Quaternion camTurnHeight = Quaternion.AngleAxis(touchMagnitude.y, + transform.right);
    5.       Quaternion rotation = camTurn * camTurnHeight;
    7. // add the rotation to the offset between the camera and the target
    8.       cameraOffset = rotation * cameraOffset;
    10.       transform.position = target.position + cameraOffset;
    What I want to do now is to clamp the camera deplacement in height, because when the camera go over the gameobject it have a weird deplacement behaviour.
    And there it's going bad...
    I've tryed two options :
    1) limit the quaternion rotation, to not be over a value, so : How to clamp a quaternion ? if we talk in degrees, I want to clamp the x rotation between -80 and 80.
    2) check the angle made by the camera looking to the target, to not move height if the angle is equal to 80°.

    I've tryed everything about this two options so if somebody can give a way to reach what I looking for, it will save my week.