After almost a year, I’m back again with another Cinemachine question! In my last Cinemachine post ( link ), the issue was resolved by using the Cinemachine ‘Simple Follow with World Up’ binding setting with the Cinemachine FreeLook Camera (thank you again, Gregoryl). I’ve also created functionality that lets me run in Loop-de-Loops (like Sonic), using the ‘Simple Follow with World Up’ binding & FreeLook Camera and using other bindings breaks this feature so I’m not able to readily use another binding.
tldr:
Problem: FreeLook Camera not acting as desired.
Constraints: Using FreeLook & ‘Simple Follow with World Up’ Binding is required.
‘Undesired/Current Cinemachine Camera Functionality’:
All that said, the issue I’m experiencing with Cinemachine occurs when running in a circle for any period of time, without touching either the mouse or right joystick on the controller). I’ve captured this on video using the ‘FreeLookColider’ sample scene included with the Cinemachine package and occurs in all versions of Unity ( v2021.3.13f1 - current ) & Cinemachine ( v2.8.9 - current). I haven’t tested anything earlier than that. After a minute and a half of running in a circle the camera has done a full rotation (in world space) around the player, which isn’t the desired result. This is the exact behavior of my personal project, as well (which is what I’m trying to ultimately fix. Not a development stopper but it’s annoying. ):
‘Desired Camera Funcitonality’:
The desired camera functionality I’m after is showcased here (this project is not using Cinemachine but is available on the Unity asset store):
I know this picture isn’t the greatest but it’s the closest I can get to illustrating my issue.

‘The Question:’
My ultimate question is whether or not Cinemachine FreeLook Camera has a feature, while using the ‘Simple Follow with World Up’ binding, that restricts the camera from moving unnecessarily in world space on it’s own without user input, similar to the ‘Desired Camera Functionality’ video above? And if so, how do I enable it? I’ve included the Cinemachine settings of my project below. Any insight and/or assistance is appreciated. Thank you, again.
Thanks for the clear description.
The camera position drift you describe is a by-product of the Lazy Follow algorithm implemented by SimpleFollow. As the character moves, the camera gets pushed and pulled, and it will always try to reposition itself as little as possible, preferring to rotate to keep the character famed. This will result in drift in the case you describe.
Your desired behaviour is implemented by WorldSpace binding mode: it always keeps the same rotation, and moves along with the character to keep it framed.
I understand that you don’t want to use WorldSpace for the going-upside-down reason.
So, is there an answer? Possibly. How attached are you to the FreeLook? If you open up the SphericalSurfaceFollow sample scene and replace the FreeLook with a vcam that looks like this, I think it will give exactly the behaviour you want:

1 Like
Hello, Gregoryl. Thanks for following up with me!
The CMFreeLook + SimpleFollow is exactly what I’m after and am hard-tied to it, regarding the loop-de-loop functionality. All other camera + bindings break this functionality (see videos at the end). My question is if there is a way to further restrict the CM FreeLook Cams bindings ‘drift’, so that it does not change position without player input. If not, that’s fine but I was just curious. I’ve also included 3 videos of other CM Camera + Binding combinations as examples of how they break my game:
CM Free Look + Simple Follow with World Up (Current Implementation):
This is the current implementation and functions exactly as required. My only desire was to eliminate the small rotations the camera makes while running in a circle but if that’s not possible while using CM FreeLook, then that’s understandable and can be overlooked, as it doesn’t truly alter gameplay.
CM FreeLook Camera + World Space:
In the video, I’m only pressing forward on the left joystick the entire time and it forces me to run in a parabola shape back down toward the ground.
CM Virtual Cam + Framing Transposer + POV:
Using this method completely breaks the players ability to rotate when attempting to run in the loop-de-loop, resulting in not even being able to run in it. The camera also fails to follow behind the player at all.
CM Virtual Cam + Framing Transposer + POV (Child of Player Object):
This method adds a huge variance and intensity to the camera rotation and only sometimes completes a rotation around the loop-de-loop. This is probably the closest solution, outside of just using CM FreeLook but is still not as consistent as it needs to be.
Overall, these are what I was hoping that CM FreeLook Cam + SimpleFollow could do but it only does two and that’s fine, as this is really only an issue with small, repeated movements. I was just unsure if there was a way to potentially restrict the ‘drift’ movement further.
The drift is just an emergent behaviour of SimpleFollow’s lazy positioning algorithm when this kind of circular motion occurs. There’s no simple and easy way around it. You might be able to hack some logic together - perhaps a CM extension - to test for this kind of thing and correct for it, but IMO you will hit edge cases and it can get complicated.
The FramingTransposer + POV vcam works just fine on the sphere sample, the camera is able to follow the character when it goes upside-down, so I think it’s possible to make it work for your scene. I don’t know what you’re doing differently to make it not work.
If you like, you can send me your test project and I can play with it a little. That might be the most efficient way forward.
I’m good with sticking with the CMFreeLook + SimpleFollow, at this point, since it accomplishes everything I need (other than the circular movements and it’s not really that big of a deal as that takes several seconds of repeated movement to even witness). Again, I was just curious if the FreeLook could be restricted further but it’s fine, since that’s not the case. And it’s not anything I’m doing code-wise that would inhibit any of the cameras ability to follow the player in the loop, as my player controller is the only code I’ve written for the game and it only reads the camera position to alter the players heading based on deltas. That said, thanks for at least examining the issue with me! The insight into the CMFreeLook camera is greatly appreciated. 