I am working on a camera script (cut down version below).
it is almost there, but there is a problem with the positioning of the camera when switching from the standard mode to the locked version (V on keyboard). This is most noticeable when moving around and rotating the camera before switching.
What I am trying to achieve is for the camera to maintain its current rotation and snap to the offset enabling rotation using the locked mouse.
However what happens is (and the severity depends on the previously set angleX/Y or the initial values of 0) is that the camera snaps to a different position.
Any help would be greatly appreciated!
local userInputService = game:GetService("UserInputService") local contextActionService = game:GetService("ContextActionService") local runService = game:GetService("RunService") local angleX, angleY = 0, 0 local character = script.Parent local humanoidRoot = character:WaitForChild("HumanoidRootPart") local camera = game.Workspace.CurrentCamera local offset = Vector3.new(2, 2, 10) local min = math.rad(85) local sensitivity = 1 local locked = false local stepped = nil function mouseMove(name, state, inputObject) angleX = angleX + (-inputObject.Delta.x*sensitivity/100) angleY = angleY + (-inputObject.Delta.y*sensitivity/100) angleY = math.clamp(angleY, -min, min) end userInputService.InputBegan:Connect(function(input, gameProcessed) if input.KeyCode == Enum.KeyCode.V then if not locked then enableLockedCamera() else enableStandardCamera() end end end) function enableLockedCamera() locked = true camera.CameraType = "Scriptable" userInputService.MouseBehavior = Enum.MouseBehavior.LockCenter contextActionService:BindActionToInputTypes("MouseMove", mouseMove, false, Enum.UserInputType.MouseMovement) --I would like to set x/y below so that the camera is positioned relative to it's current rotation (not snap to a different angle). --Currently depending on the characters movement, it snaps to a different angle depending on the values of angleX/Y. --angleX = ? --angleY = ? stepped = runService.RenderStepped:Connect(function() camera.CFrame = CFrame.new(humanoidRoot.Position) * CFrame.Angles(0, angleX, 0) * CFrame.Angles(angleY, 0, 0) camera.CFrame = camera.CFrame * CFrame.new(offset) end) end function enableStandardCamera() locked = false camera.CameraType = Enum.CameraType.Custom contextActionService:UnbindAction("MouseMove") if stepped then stepped:Disconnect() end end