Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Miles92 · Apr 30 at 07:45 PM · c#camerarotationrigidbodycamera rotation

Cinemachine is stuttering with 3D Rigidbody when rotating the camera

I've got two cameras, a freelook and a virtual cam that I swap between. They are both following an empty gameobject attached to the player (I have tried to have it follow the player itself as well, but nothing seemed to change in terms of stuttering)

If I'm only moving the character without adjusting the camera, there doesn't seem to be any stuttering, but as soon as I try to rotate the camera, there's noticeable stutter (Moreso on the virtual cam, than the freelook) on both the player and the world. I've looked at a few other threads with similar issues and have not had much luck.

  • have the player's rigidbody interpolated (And have tried it with both extrapolation and none). -The update method for the camera is Fixed Update

  • have updated the Fixed Time step from .02 to .0167 and .01. This seemed to help a little, but still noticeable.
    • I have made a test build with only the core necessary scripts (Slightly altered to only provide the core functions) and the issue still happens in the build of the game.

This is the aiming script that activates and controls the Virtual Camera using System.Collections; using System.Collections.Generic; using UnityEngine; using Cinemachine; using Platformer.Movement;

     public class PlayerAimingState : MonoBehaviour
     {
         [SerializeField] float turnSpeed;
         [SerializeField] Transform camFollow;
         [SerializeField] AxisState xAxis;
         [SerializeField] AxisState yAxis;
         [SerializeField] CinemachineVirtualCamera aimCam;
         [SerializeField] CinemachineFreeLook freeCam;
         [SerializeField] Transform player;
         PlayerMovement movement;
         Aimer aimer;
         public  void OnStateChangeFrom()
         {
             aimCam.gameObject.SetActive(false);
             freeCam.gameObject.SetActive(true);
         }
 
         private void FixedUpdate()
         {
             if(aimer.isAiming)
             {
             OnStateChangeTo();
 
                 AimRotation();
             return;
             }
         OnStateChangeFrom();
         }
 
         // Start is called before the first frame update
         void Start()
         {
             movement = GetComponentInParent<PlayerMovement>();
             aimer = FindObjectOfType<Aimer>();
         }
 
         public void AimRotation()
         {
         xAxis.Update(Time.fixedDeltaTime);
         yAxis.Update(Time.fixedDeltaTime);
         camFollow.rotation= Quaternion.RotateTowards(camLookAt.rotation, Quaternion.Euler(new Vector3(yAxis.Value, xAxis.Value, 0)),turnSpeed * Time.fixedDeltaTime);
         transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(new Vector3(0, xAxis.Value, 0)), turnSpeed * Time.fixedDeltaTime);
 
         }
     }

This is the general rotation code when the above aiming script is not active (At which point, it takes over the rotation with the player rotating with the camera follow object

     public class Rotation : MonoBehaviour
         {
             public void RotatePlayer(float rotationSpeed, Vector3 direction)
             {
                 if (direction != Vector3.zero)
                 {
                     direction.y = 0;
                     Quaternion newRotation = Quaternion.LookRotation(direction, Vector3.up);
                     transform.rotation = Quaternion.RotateTowards(transform.rotation, newRotation, rotationSpeed * Time.fixedDeltaTime);
                 }
             }
         }
 
 And here's the movement code
 namespace Platformer.Movement
 {
     public class PlayerMovement : MonoBehaviour
     {
         Rigidbody rb;
         Vector3 direction = Vector3.zero;
         Camera cam;
         Rotation rotation;
         Vector3 moveDirection;
         public float rotationSpeed;
         public float movementSpeed;
         float hInput;
         float vInput;
         Aimer aimer;
         private void Awake()
         {
             rb = GetComponent<Rigidbody>();
             cam = Camera.main;
             rotation = GetComponent<Rotation>();
             aimer = GetComponent<Aimer>();
         }
         // Start is called before the first frame update
         void Start()
         {
 
         }
 
         // Update is called once per frame
         void Update()
         {
             GetInput();
         }
 
         private void FixedUpdate()
         {
             MoveToPosition(hInput, vInput) ;
             if (!aimer.isAiming)
             {
                 rotation.RotatePlayer(rotationSpeed, moveDirection);
             }
 
         }
         public Vector3 GetInput()
         {
 
             hInput = Input.GetAxisRaw("Horizontal");
             vInput = Input.GetAxisRaw("Vertical");
             return new Vector3(hInput, 0, vInput);
         }
 
         public  void MoveToPosition(float hInput, float vInput)
         {
             var camForward = cam.transform.forward;
             camForward.y = 0;
             Vector3 moveDir = camForward *vInput + cam.transform.right * hInput;
             moveDirection = moveDir;
             direction = transform.position + (moveDir.normalized * movementSpeed * Time.fixedDeltaTime);
             rb.MovePosition(direction);
         }
 
         public float GetRotationSpeed()
         {
             return rotationSpeed;
         }
 
         public Vector3 GetDirection()
         {
             //print(moveDirection);
             return moveDirection;
         }
     }
 }
 

Images of the cam setups as well as the aiming and rigidbody settings on the player. https://imgur.com/a/OOV67w8

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by rh_galaxy · Apr 30 at 08:02 PM

I think you should do camera changes (rotation and position) in LateUpdate(), all others in FixedUpdate(). Maybe keep Fixed Time step at 0.01. That's because you want to move the camera every frame, not just every timestep.

The rigidbody Player should have interpolation on. At least that's how I do it to get smooth camera movements.

 public class CameraController : MonoBehaviour
 {
     void LateUpdate()
     {
         Vector3 v = player.transform.position;
         v.z = -4.3f; //add your offset from player
         transform.position = v;
     }
 }
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Miles92 · May 01 at 07:54 PM 0
Share

I kept the timestep at .01, Interpolation on, and moved all the rotation code to LateUpdate() but it just seemed to make the jittering worse. I don't think Cinemachine liked it when I had my player moving in FixedUpdate with the rigidbody and trying to follow the rotation in LateUpdate(). :(

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

820 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Flip over an object (smooth transition) 3 Answers

Rotating player relative to the camera (Unity C#) 1 Answer

Character goes up when the camera looks up 0 Answers

Camera rotation 0 Answers

Pysics not working as expected 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges