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

Why does the camera not focus and stays static?

local lplayer = game.Players.LocalPlayer
repeat wait() until lplayer.Character
local Players = game:GetService("Players")
local target = lplayer.Character.Torso

local cam = workspace.CurrentCamera

cam.CameraSubject = target
cam.CameraType = "Scriptable"
cam.CoordinateFrame = CFrame.new(30,30,30)

local angle = 0


for i,v in pairs(lplayer.Character.Torso:GetChildren()) do
	if v:IsA("Part") and v.Name == "Blocky" then
		local newtarget = lplayer.Character.Torso.Blocky
		while wait() do
			cam.CoordinateFrame = CFrame.new(newtarget.Position) * CFrame.Angles(0, angle, 0) * CFrame.new(0, 0, 5)
			angle = angle + math.rad(1)
		end
	end
end

It doens't focus on "Blocky" which is a 2x2x2 cube that's child of Torso.

** Edit **Blocky is not a valid member of Part ** It's a local script **

1 comment

0

Have you tried CFrame.new(0, 0, -5)?

1 answer

✓ Accepted answer

The problem in your script lies at line 16: You're assuming that Blocky is always created before the script runs, when in fact this isn't the case. According to a conversation we had, Blocky is added to the player immediately after spawning, and the script runs also immediately after spawning.

Solution

You don't even have to iterate through the player's Torso. To fix this, use WaitForChild("name"). WaitForChild("name") yields the current thread (pauses the script) until a child with a matching name is found. The child is then returned.

local Players = game:GetService("Players")
local lplayer = Players.LocalPlayer
repeat wait() until lplayer.Character
local Torso = lplayer.Character:WaitForChild("Torso")
local Blocky = Torso:WaitForChild("Blocky") -- it's good practice (read: necessary) to chain WaitForChild() for each descendant.

local cam = workspace.CurrentCamera

cam.CameraSubject = Torso
cam.CameraType = "Scriptable"

local angle = 0
while wait() do
	cam.CoordinateFrame = CFrame.new(Blocky.Position) * CFrame.Angles(0, angle, 0) * CFrame.new(0, 0, 5)
	angle = angle + math.rad(1)
end

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