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
