Hello guys,
I can’t figure out how is smooth camera made in “DOORS” game (of course first person camera!!). What did they do to make it smooth. I tried Torsion Spring but it was not working. Do you know how was it done or do you have any scripts for that?
try this script put it in startergui
repeat wait() until game:GetService(“Players”).LocalPlayer.Character ~= nil
local runService = game:GetService(“RunService”)
local input = game:GetService(“UserInputService”)
local players = game:GetService(“Players”)– you can mess with these settings
CanToggleMouse = {allowed = true; activationkey = Enum.KeyCode.V;} – lets you move your mouse around in firstperson
CanViewBody = true – whether you see your body
Sensitivity = 0.6 – anything higher would make looking up and down harder; recommend anything between 0~1
Smoothness = 0.05 – recommend anything between 0~1
FieldOfView = 80 – fov
HeadOffset = CFrame.new(0,0.7,0) – how far your camera is from your headlocal cam = game.Workspace.CurrentCamera
local player = players.LocalPlayer
local m = player:GetMouse()
m.Icon = “http://www.roblox.com/asset/?id=7213486631” – replaces mouse icon
local character = player.Character or player.CharacterAdded:wait()
local human = character.Humanoid
local humanoidpart = character.HumanoidRootPartlocal head = character:WaitForChild(“Head”)
local CamPos,TargetCamPos = cam.CoordinateFrame.p,cam.CoordinateFrame.p
local AngleX,TargetAngleX = 0,0
local AngleY,TargetAngleY = 0,0local running = true
local freemouse = false
local defFOV = FieldOfViewlocal w, a, s, d, lshift = false, false, false, false, false
– you can mess with these settings
local easingtime = 0.1 --0~1
local walkspeeds = {
enabled = true;
walkingspeed = 16;
backwardsspeed = 10;
sidewaysspeed = 15;
diagonalspeed = 16;
runningspeed = 25;
runningFOV= 85;
}
function updatechar()
for _, v in pairs(character:GetChildren())do
if CanViewBody then
if v.Name == ‘Head’ then
v.LocalTransparencyModifier = 1
v.CanCollide = false
v.face.LocalTransparencyModifier = 1
end
else
if v:IsA’Part’ or v:IsA’UnionOperation’ or v:IsA’MeshPart’ then
v.LocalTransparencyModifier = 1
v.CanCollide = false
end
end
if v:IsA’Accessory’ then
v:FindFirstChild(‘Handle’).LocalTransparencyModifier = 1
v:FindFirstChild(‘Handle’).CanCollide = false
end
if v:IsA’Hat’ then
v:FindFirstChild(‘Handle’).LocalTransparencyModifier = 1
v:FindFirstChild(‘Handle’).CanCollide = false
endend
end
– math, thx roblox wiki
function lerp(a, b, t)
return a * (1-t) + (b*t)
end
input.InputChanged:connect(function(inputObject)
if inputObject.UserInputType == Enum.UserInputType.MouseMovement then
local delta = Vector2.new(inputObject.Delta.x/Sensitivity,inputObject.Delta.y/Sensitivity) * Smoothnesslocal X = TargetAngleX - delta.y TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X TargetAngleY = (TargetAngleY - delta.x) %360
end
end)
input.InputBegan:connect(function(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.KeyCode == CanToggleMouse.activationkey then
if CanToggleMouse.allowed and freemouse == false then
freemouse = true
else
freemouse = false
end
end
endif inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.KeyCode == Enum.KeyCode.W then
w = true
endif inputObject.KeyCode == Enum.KeyCode.A then a = true end if inputObject.KeyCode == Enum.KeyCode.S then s = true end if inputObject.KeyCode == Enum.KeyCode.D then d = true end if inputObject.KeyCode == Enum.KeyCode.LeftShift then lshift = true end
end
end)input.InputEnded:connect(function(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.KeyCode == Enum.KeyCode.W then
w = false
endif inputObject.KeyCode == Enum.KeyCode.A then a = false end if inputObject.KeyCode == Enum.KeyCode.S then s = false end if inputObject.KeyCode == Enum.KeyCode.D then d = false end if inputObject.KeyCode == Enum.KeyCode.LeftShift then lshift = false end
end
end)
runService.RenderStepped:connect(function()
if running then
updatechar()CamPos = CamPos + (TargetCamPos - CamPos) *0.28 AngleX = AngleX + (TargetAngleX - AngleX) *0.35 local dist = TargetAngleY - AngleY dist = math.abs(dist) > 180 and dist - (dist / math.abs(dist)) * 360 or dist AngleY = (AngleY + dist *0.35) %360 cam.CameraType = Enum.CameraType.Scriptable cam.CoordinateFrame = CFrame.new(head.Position) * CFrame.Angles(0,math.rad(AngleY),0) * CFrame.Angles(math.rad(AngleX),0,0) * HeadOffset -- offset humanoidpart.CFrame=CFrame.new(humanoidpart.Position)*CFrame.Angles(0,math.rad(AngleY),0) else game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.Default
end
if (cam.Focus.p-cam.CoordinateFrame.p).magnitude < 1 then
running = false
else
running = true
if freemouse == true then
game:GetService(“UserInputService”).MouseBehavior = Enum.MouseBehavior.Default
else
game:GetService(“UserInputService”).MouseBehavior = Enum.MouseBehavior.LockCenter
end
endif not CanToggleMouse.allowed then
freemouse = false
endcam.FieldOfView = FieldOfView
if walkspeeds.enabled then
if w and s then return endif w and not lshift then FieldOfView = lerp(FieldOfView, defFOV,easingtime) human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.walkingspeed,easingtime) elseif w and a then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.diagonalspeed,easingtime) elseif w and d then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.diagonalspeed,easingtime) elseif s then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed,easingtime) elseif s and a then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed - (walkspeeds.diagonalspeed - walkspeeds.backwardsspeed),easingtime) elseif s and d then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed - (walkspeeds.diagonalspeed - walkspeeds.backwardsspeed),easingtime) elseif d then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.sidewaysspeed,easingtime) elseif a then human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.sidewaysspeed,easingtime) end if lshift and w then FieldOfView = lerp(FieldOfView, walkspeeds.runningFOV,easingtime) human.WalkSpeed = lerp(human.WalkSpeed,human.WalkSpeed + (walkspeeds.runningspeed - human.WalkSpeed),easingtime) end
end
end)
I did my own, that doesn’t use keyboard or smth, based on a lot maths but your works too so I will check this one as solution
Can you send it to me? I’m also in need of something similiar, but I don’t like math.
Could you open source it on GitHub?
The problem with the solution is that when you walk backwards, your character sways a little bit towards the left or right and returns back to straight after you stop walking. This problem doesn’t happen with forward or sideward movements.
@ne3ulimity (tagged because you also wanted it)
i did a full tutorial on it for Polish community, but if you want you can scroll down and just copy whole code
let me know if it works!
https://devforum.roblox.com/t/p%C5%82ynna-kamera-taka-jak-w-doors/2273834