Preventing user from flinging: is there a better way than this?

run.RenderStepped:Connect(function(dT)
	local viewmodel = game.Players.LocalPlayer.Character or game.Players.LocalPlayer.CharacterAdded:Wait()
	local difference = CFrame.new(0, -1.5, -0.02)
	if viewmodel and viewmodel.Head.LocalTransparencyModifier > 0.9 then
		viewmodel.HumanoidRootPart.CFrame = cam.CFrame * difference
	end
end)

i am trying to make the character face the camera while in first person, just like what you’ll see in fps games
it works fine, however the problem with it is that the player keeps flinging, how do i mitigate it?

you are taking the humanoid root part to the cam cframe multiplied by the difference, which is causing it to happen, also this is roblox’s issue, not the script’s issue