Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

What's a better way to approach this than the method I'm doing?

Hello everyone!

I am making a camera script that follows the player, but at a set offset.

The execution for this seems pretty straightforward, as I have done this:

--This replaces the CameraScript found in StarterPlayerScripts

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()

local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable

local offset = Vector3.new(0,10,15)

local humanoidRoot = character:WaitForChild("HumanoidRootPart")

while true do
	local playerPos = humanoidRoot.Position 
	
	local cameraCFrame = CFrame.new(playerPos + offset, humanoidRoot.Position)
	camera.CFrame = cameraCFrame

	wait()
end

This method WORKS, however It's a little bit choppy as seen in this example.

Now this seems to be due to the fact that the loop has the wait element in this, meaning that the script stops very momentarily and isn't on a constant loop. However removing this wait element breaks the script entirely.

Is there a different way to approach this to yield the same result that I haven't thought of?

Any help would be appreciated! Thank you :)

1 answer

✓ Accepted answer

You can use RunService's .Heartbeat signal to run a block of code every Frame. This should allow you to properly render.

local RunService = game:GetService("RunService")

RunService.Heartbeat:Connect(function()
	--// Code
end)

This discussion is preserved as it was. New answers, comments, and votes are closed.