So I have a quite long script (disregard the module) that basically has an overview of the character and can zoom in/out (which I removed for this post) and can rotate up and down, and all around the character.
The problem is when rotating the camera angle along the Y axis (in this case that would be spinning around the character) it glitches out and can do random circles and never just does a perfect circle around the character.
The set up and variables in this might not be very reader friendly but just try to get the general sense of it and see if you can figure it out. Also to test what I mean by the wacky camera go to my test place here
If this is too hard to read on this website, go to here
local lib = require(game.Workspace.CameraModule) local plr = game.Players.LocalPlayer repeat wait() until plr.Character local char = plr.Character local mouse = plr:GetMouse() local minzoom = 0.42 local maxzoom = 2.15 local zoom = 1 --Zoom multiplier local rotation = {} rotation["x"] = 0 rotation["y"] = 0 rotation["z"] = 0 local uis = game:GetService("UserInputService") local xrotmax = 58 local xrotmin = -12 char:WaitForChild("Humanoid").WalkSpeed = 0 --Just a test lib.SetCameraToScriptable() set = function() local cf = CFrame.new(char.HumanoidRootPart.Position) * CFrame.Angles(rotation["x"],, rotation["y"], rotation["z"]) * CFrame.new(0, 15 * zoom, 9 * zoom) lib.PointAt(cf, char.Head.CFrame) end set() delay(0, function() game:GetService("RunService").RenderStepped:connect(function() set() end) end) --Put zoom functions here local looped = {} uis.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.Keyboard then local key = string.sub(tostring(input.KeyCode), 14) --This is fourteen because it's originally an enum value and to get to the part as to what letter or key it is, it is fourteen letters in. if key == "W" or key == "A" or key == "S" or key == "D" then delay(0, function() local rot = ((key == "W" or key == "A") and math.rad(-2) or (key == "S" or key == "D") and math.rad(2)) looped[key] = true local rottype = ((key == "W" or key == "S") and "x" or (key == "A" or key == "D") and "y") while looped[key] and wait() do local rotdeg = math.deg(rotation[rottype] + rot) if rottype == "x" and not (rotdeg <= xrotmax and rotdeg >= xrotmin) then break end rotation[rottype] = rotation[rottype] + rot end end) end end end) uis.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.Keyboard then local key = string.sub(tostring(input.KeyCode), 14) if looped[key] then looped[key] = false end end end)