Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

243
Views
Shaking camera when looking at certain angle in unity 3d

I have a strange problem with my camera controller and I can't understand why. When I look in certain directions, the camera starts to shake. The rotation of the camera seems to change very quickly at this moment, but I don't understand why.

Here is the code I use (this is called in update).

void PhotoMode()
    {
        Vector3 newPos = transform.position;
        //déplacement avant
        if(Input.GetKey(InputManager.IM.forward))
        {
            newPos += cam.transform.forward  * moveSpeedPhoto * Time.unscaledDeltaTime;
        } 

        //déplacement arrière
        if(Input.GetKey(InputManager.IM.backward))
        {
            newPos -= cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime;
        } 

        //déplacement gauche
        if(Input.GetKey(InputManager.IM.left))
        {
            newPos += -transform.right * moveSpeedPhoto * Time.unscaledDeltaTime;
        }

        //déplacement droite
        if(Input.GetKey(InputManager.IM.right))
        {   
            newPos += transform.right * moveSpeedPhoto * Time.unscaledDeltaTime;
        }

        float x = Input.GetAxis("Mouse X");
        float y = Input.GetAxis("Mouse Y");

        x *= photoRotSpeed * Time.unscaledDeltaTime;
        y *= photoRotSpeed * Time.unscaledDeltaTime;

        currentX = Mathf.Lerp(currentX, x, smoothTime * Time.unscaledDeltaTime);
        currentY = Mathf.Lerp(currentY, y, smoothTime * Time.unscaledDeltaTime);

        float rotationX = transform.localEulerAngles.y + currentX * photoRotSpeed;

        rotationY += currentY * photoRotSpeed;
        rotationY = Mathf.Clamp(rotationY, -90+65, 90+65);

        transform.localRotation = Quaternion.Euler(new Vector3(-rotationY, rotationX, 0));

        transform.position = newPos;
    }

enter image description here

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

I managed to make it work with this : (the cam in inside a game object, which has the script)

void PhotoMode()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            dontMove = !dontMove;
            screenshotManager.photoModeCanvas.SetActive(dontMove);

            if(!dontMove && screenshotManager.focusDistanceIndicatorToggle.isOn && screenshotManager.distanceIndicator.activeSelf)
            {
                screenshotManager.FocusDistanceIndicator(false);
            }

            if(dontMove && screenshotManager.focusDistanceIndicatorToggle.isOn && !screenshotManager.distanceIndicator.activeSelf)
            {
                screenshotManager.FocusDistanceIndicator(true);
            }
        }

        if(dontMove)
        {
            Cursor.lockState = CursorLockMode.None;
            return;
        }

        Cursor.lockState = CursorLockMode.Locked;

        Vector3 newPos = transform.position;
        float scroll = Input.GetAxis("Mouse ScrollWheel");

        moveSpeedPhoto += scroll*10;
        moveSpeedPhoto = Mathf.Clamp(moveSpeedPhoto, 0, 100);
        //déplacement avant
        if(Input.GetKey(InputManager.IM.forward))
        {
            newPos += cam.transform.forward  * moveSpeedPhoto * Time.unscaledDeltaTime;
        } 

        //déplacement arrière
        if(Input.GetKey(InputManager.IM.backward))
        {
            newPos -= cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime;
        } 

        //déplacement gauche
        if(Input.GetKey(InputManager.IM.left))
        {
            newPos += -transform.right * moveSpeedPhoto * Time.unscaledDeltaTime;
        }

        //déplacement droite
        if(Input.GetKey(InputManager.IM.right))
        {   
            newPos += transform.right * moveSpeedPhoto * Time.unscaledDeltaTime;
        }

        float x = Input.GetAxis("Mouse X") * photoRotSpeed * Time.unscaledDeltaTime;
        float y = Input.GetAxis("Mouse Y") * photoRotSpeed * Time.unscaledDeltaTime;

        rotationX -= y;
        rotationX = Mathf.Clamp(rotationX, -90, 90);

        cam.transform.localRotation = Quaternion.Euler(rotationX, 0f, 0f);
        this.transform.Rotate(Vector3.up * x);

        transform.position = newPos;
    }

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!