Ultra Cinematic Smooth Third-Person Camera

Hello there. This post is to showcase and open source a concept I have had for months but have just made.
Here is a short showcase video:https://youtu.be/VBSkWhztPXQ. I was testing it on a alt.
To use it you must do two simple things:

  1. Download the updated player module and put it in StarterPlayerScripts.
  2. Add this local script to StarterPlayerScripts:
local camPart = Instance.new("Part")
camPart.Size = Vector3.new(1,1,1)
camPart.CanCollide = false
camPart.Anchored = true
camPart.Transparency = 1
camPart.Name = "CurrrentCameraPart"
camPart.Parent = game.Workspace

local camRig = Instance.new("Part")
camRig.Size = Vector3.new(1,1,1)
camRig.CanCollide = false
camRig.Parent = game.Workspace
camRig.Transparency = 1

local RUS = game:GetService("RunService")

local bv = Instance.new("BodyVelocity")

bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = (camPart.Position - workspace.CurrentCamera.CFrame.p).Unit * 10

local gy = Instance.new("BodyGyro")
gy.MaxTorque = Vector3.new(30000, 30000, 30000)

workspace.CurrentCamera.CameraType = Enum.CameraType.Follow

bv.Parent = camRig
gy.Parent = camRig

RUS.Heartbeat:Connect(function()

	local char =game.Players.LocalPlayer.Character
	if not char then
		return
	end

	local head = game.Players.LocalPlayer.Character:FindFirstChild("Head") :: BasePart

	if not head then
		return
	end

	workspace.CurrentCamera.CFrame = camRig.CFrame
	-- find the distance beetween the camera and the camPart
	local distance = (workspace.CurrentCamera.CFrame.p - camPart.Position).Magnitude
	-- if it's too far away, move the rig closer to the camera
	local newDistance = math.min(distance, 50)
	local NormDistance = (distance / 50)
	bv.Velocity = (camPart.Position- workspace.CurrentCamera.CFrame.p).Unit * (NormDistance * 100)


	gy.CFrame = CFrame.lookAt(camRig.Position, head.Position)
end)

I am not saying this code uses the best practices I am just demonstrating and open-sourcing a concept.
This has not been tested for vehicles so I would assume it would not work for them although anybody with moderate scripting knowledge should be able to reverse engineer and make it work with vehicles and even possibly comment a improved copy. It also does not work for first person and you should set zoom constraints.
Here is the updated module:
PlayerModule.rbxm (127.9 KB)
Thanks for reading. I wish you luck with using this.

3 Likes

dosnt seem to work
cam just looks stuck

2 Likes

Is there anything in the console? If not try setting it up in an empty project and show me the workspace. [EDIT] I tested it in a new place myself and it turns out two lines of the script are wrong. I will just update it and by the time you see this it should work.


Still dosnt work

It seems that streaming enabled is effecting the capability of the part to load. Try going into the workspace and turning it off. [EDIT] Just if your wondering the part is to do with the camera.


Still dosnt work with streaming off

It worked for me when setting it up in an empty test baseplate so I would say it is to do with something in your project. Please try setting it up on an empty baseplate and if that does not work screenshot contents of the workspace in the explorer while in play mode (in an empty project of course). I will make a video demonstrating how to set it up if you have further trouble.

1 - Empty baseplate - Freshly made

  1. Drag and drop the script inside Starter Player Scripts

  1. Run the game

Nothing happens


heres the output

1 Like

Nothing happened because you did not add the local script that goes with it that I mentioned in step 2.

2 Likes