Hi, I’m having an issue regarding my character’s camera. It seems that there is a very slight shakiness in first person view. Camera setup is custom and so is movement. Both are set using CFrame, but I cannot pinpoint the exact issue.
Portion of Camera Script
deltax = userinput:GetMouseDelta().X * p_settings.mouse.MouseSensX
deltay = userinput:GetMouseDelta().Y * p_settings.mouse.MouseSensY
--X
fake_cam.CFrame = ( CFrame.fromAxisAngle(Vector3.new(0,1,0), rad(-deltax))*(fake_cam.CFrame-fake_cam.CFrame.p))+fake_cam.CFrame.p
local heady, headx, headz = (fake_cam.CFrame):toOrientation()
if math.deg(heady) >= p_settings.cam.limit.y-1 then
if deltay > 0 then
fake_cam.CFrame = fake_cam.CFrame * CFrame.fromAxisAngle(Vector3.new(1,0,0),rad(-deltay))
end
elseif math.deg(heady) <= -(p_settings.cam.limit.y-1) then
if deltay < 0 then
fake_cam.CFrame = fake_cam.CFrame * CFrame.fromAxisAngle(Vector3.new(1,0,0),rad(-deltay))
end
else
fake_cam.CFrame = fake_cam.CFrame * CFrame.fromAxisAngle(Vector3.new(1,0,0),rad(-deltay))
end
if p_settings.cam.firstperson == true then
cam.CFrame = fake_cam.CFrame * CFrame.new(0,head.Size.Y/1.5,-head.Size.Z/2)
else
cam.CFrame = fake_cam.CFrame * p_settings.cam.thirdperson_pos
end
Portion of Movement Script
runservice.Heartbeat:connect(function(dt)
local movespeed = player_speed/60
if movex ~= 0 or movez ~= 0 then
idle_Anim:Stop()
walk_Anim:AdjustSpeed((player_speed/p_settings.Movement.walkspeed)^.5)
if player_speed < p_settings.Movement.runspeed then
if walk_Anim.IsPlaying ~= true then
run_Anim:Stop()
walk_Anim:Play()
end
elseif run_Anim.IsPlaying ~= true then
walk_Anim:Stop()
run_Anim:Play()
end
is_moving = true
else
idle_Anim:Play()
walk_Anim:Stop()
run_Anim:Stop()
is_moving = false
end
local heady, headx, headz = (root.CFrame:ToObjectSpace(fake_cam.CFrame)):toOrientation()
--char_velocity.Velocity = (root.CFrame * CFrame.fromOrientation(0,headx,0)).lookVector * p_settings.Movement.walkspeed
--root.CFrame = CFrame.new(root.CFrame.p + (head.CFrame.lookVector * Vector3.new(movez * p_settings.Movement.walkspeed, 0, movez * p_settings.Movement.walkspeed)) + (head.CFrame.rightVector * Vector3.new(movex * p_settings.Movement.walkspeed, 0, movex * p_settings.Movement.walkspeed))) * (root.CFrame - root.CFrame.p)
root.CFrame = CFrame.new(root.CFrame.p + ((root.CFrame * CFrame.fromOrientation(0,headx,0)).lookVector * (Vector3.new(movez * movespeed, 0, movez * movespeed)* (60/math.floor(1/dt))))+(head.CFrame.rightVector * (Vector3.new(movex * movespeed, 0, movex * movespeed))*(60/math.floor(1/dt)))) * (root.CFrame - root.CFrame.p)
--root.Velocity = ((head.CFrame.lookVector) * 200* movez * Vector3.new(1,0,1)) + ((head.CFrame.rightVector) * 200 *movex * Vector3.new(1,0,1))
if client_settings.debug_enable == true then
thing.CFrame = CFrame.new(root.CFrame.p, Vector3.new((root.CFrame.p + (head.CFrame.lookVector)).X, root.CFrame.p.Y, (root.CFrame.p + (head.CFrame.lookVector)).Z)) * CFrame.new(0,0,-5)
thing2.CFrame = CFrame.new(root.CFrame.p, Vector3.new((root.CFrame.p + (head.CFrame.rightVector)).X, root.CFrame.p.Y, (root.CFrame.p + (head.CFrame.rightVector)).Z)) * CFrame.new(0,0,-5)
end
end)
local held_keys = {}
game:GetService("UserInputService").InputBegan:connect(function(inputObject, gameProcessedEvent)
table.insert(held_keys, inputObject.KeyCode)
if inputObject.KeyCode == p_settings.controls.movements.forw then
movez = 1
end
if inputObject.KeyCode == p_settings.controls.movements.back then
movez = -1
end
if inputObject.KeyCode == p_settings.controls.movements.left then
movex = -1
end
if inputObject.KeyCode == p_settings.controls.movements.right then
movex = 1
end
if inputObject.KeyCode == p_settings.controls.movements.run then
is_running = true
spawn(function()
for i = player_speed, p_settings.Movement.runspeed-1, 1 do
if is_running == true then
player_speed = player_speed+1
wait(p_settings.Movement.runRate/(p_settings.Movement.runspeed-p_settings.Movement.walkspeed))
else
break
end
end
end)
end
end)
I think these two portions of the script might be the ones causing the issues, but l cannot find out why it’s the issue nor how to fix.