Hi, I'm writing a game that requires a third-person camera. My main goal when writing this camera script is to make it as smooth as possible. The problem I have is that I want it to lock onto my mouse (just like shift-lock) but smoothly.
Code:
repeat wait() until game.Players.LocalPlayer.Character
-- Settings
local XCamOffSet = 2
local YCamOffSet = 2
local ZCamOffSet = 4
local Player = game.Players.LocalPlayer
local Character = Player.Character
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Camera = game.Workspace.CurrentCamera
local DiedEvent = game.ReplicatedStorage.RemoteEvents.DiedEvent
local FakeCamera = nil
local Forward = false
local Backwards = false
local Left = false
local Right = false
function runCamera()
Character = Player.Character
FakeCamera = Instance.new("Part",Camera)
FakeCamera.CanCollide = false
FakeCamera.Anchored = true
while wait() and Character.Parent do
local m = Character.HumanoidRootPart.CFrame * CFrame.new(XCamOffSet, YCamOffSet, ZCamOffSet)
Camera.CameraType = Enum.CameraType.Scriptable
if (Forward) then
Camera:Interpolate(m, m + Character.HumanoidRootPart.CFrame.lookVector, .1)
ZCamOffSet = 4
XCamOffSet = 2
elseif (Backwards) then
Camera:Interpolate(m,m + Character.HumanoidRootPart.CFrame.lookVector, .1)
ZCamOffSet = -5
XCamOffSet = 2
elseif (Left) then
Camera:Interpolate(m,m + Character.HumanoidRootPart.CFrame.lookVector, .05)
XCamOffSet = -3
ZCamOffSet = 4
elseif (Right) then
Camera:Interpolate(m,m + Character.HumanoidRootPart.CFrame.lookVector, .05)
XCamOffSet = 3
ZCamOffSet = 4
else
Camera:Interpolate(m,m + Character.HumanoidRootPart.CFrame.lookVector, .05)
ZCamOffSet = 4
XCamOffSet = 2
end
end
end
UserInputService.InputBegan:Connect(function(keyCode)
if keyCode.keyCode == Enum.KeyCode.W then
Forward = true
elseif keyCode.keyCode == Enum.KeyCode.S then
Backwards = true
elseif keyCode.keyCode == Enum.KeyCode.A then
Left = true
elseif keyCode.keyCode == Enum.KeyCode.D then
Right = true
end
end)
UserInputService.InputEnded:Connect(function(keyCode)
if keyCode.keyCode == Enum.KeyCode.W then
Forward = false
elseif keyCode.keyCode == Enum.KeyCode.S then
Backwards = false
elseif keyCode.keyCode == Enum.KeyCode.A then
Left = false
elseif keyCode.keyCode == Enum.KeyCode.D then
Right = false
end
end)
Player.CharacterAdded:Connect(runCamera)
if Player.Character then runCamera() end

1 comment
Refer to this: https://devforum.roblox.com/t/rotating-a-camera-around-a-player-based-on-mouse-movements/203717