Client scripts will run immediatly when the source Code is replicated i guess. So I would wait until the Game ist loaded and then just move the camera.
If not game:IsLoaded() then
game.Loaded.wait()
end
local Cameras = workspace.Cameras
local MenuCamera = Cameras.MenuCamera
local CurrentCamera = workspace.CurrentCamera
--
CurrentCamera.CameraType = Enum.CameraType.Scriptable
CurrentCamera.CFrame = MenuCamera.CFrame
Sorry, do you want to get the camera immediately after the local player joins?
If so, why are you waiting for the local player to join (they are already in-game)?
Yes.
But keep in mind that the current camera could be nil so I’d recommend making a second backup like or WaitForChild("Camera")
Your script could be:
local Cameras = workspace:WaitForChild("Cameras")
local MenuCamera = Cameras.MenuCamera
local CurrentCamera = workspace.CurrentCamera or workspace:WaitForChild("Camera")
CurrentCamera.CameraType = Enum.CameraType.Scriptable
CurrentCamera.CFrame = MenuCamera.CFrame
It is maybe because it is in StarterGui as you’ve said earlier. Try putting it in StarterPlayerScripts
local Cameras = workspace:WaitForChild("Cameras")
local MenuCamera = Cameras.MenuCamera
local CurrentCamera = workspace.CurrentCamera or workspace:WaitForChild("Camera")
--
local Players = game:GetService("Players")
print("Went through locals")
--
CurrentCamera.CameraType = Enum.CameraType.Scriptable
CurrentCamera.CFrame = MenuCamera.CFrame
print("Went through code")
It printed both prints although it’s not changing the camera.