Camera

Camera Properties

PropertiesDetails
CameraTypeDefines the behavior of the camera (e.g., Fixed, Scriptable).
CFrameRepresents the position and orientation of the camera.
FieldOfViewControls the zoom level of the camera.
FocusThe point in space the camera is focused on.

CameraTypes

CameraTypesDetails
Enum.CameraType.FixedThe camera remains at a fixed position and orientation.
Enum.CameraType.ScriptableThe camera’s position and orientation can be controlled via scripts.
Enum.CameraType.AttachThe camera is attached to an object and follows its movements.
Enum.CameraType.FollowThe camera follows the player’s character, rotating to keep it in view.
Enum.CameraType.TrackThe camera tracks the player’s character from a fixed position.
Enum.CameraType.CustomThe default camera behavior with customizable options.

Setting Up a Fixed Camera

Image 1
Roblox Studio
wait(2)
print("Camera position updating")
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Fixed
--Positioned 50 studs above the origin, looking at the origin
camera.CFrame = CFrame.new(Vector3.new(0, 50, 0), Vector3.new(0, 0, 0))
print("Camera position updated")

Custom camera script that follows the player.

Image 1
Roblox Studio
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()

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

game:GetService("RunService").RenderStepped:Connect(function()
	local targetPart = character:WaitForChild("HumanoidRootPart")
	local targetPosition = targetPart.Position + Vector3.new(0, 10, 10)  -- Offset above and behind the player
	camera.CFrame = CFrame.new(targetPosition, targetPart.Position) -- Camera looks at the player
end)

Switch camera

Image 1
Roblox Studio
local function switchToCamera(cameraName)
	local camera = workspace:FindFirstChild(cameraName)
	if camera then
		workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
		workspace.CurrentCamera.CFrame = camera.CFrame
		print("Switched to camera: " .. cameraName)
	else
		warn("Camera not found: " .. cameraName)
	end
end

local topDownCamera = Instance.new("Camera")
topDownCamera.Name = "TopDownCamera"
topDownCamera.CFrame = CFrame.new(Vector3.new(0, 50, 0), Vector3.new(0, 0, 0))
topDownCamera.Parent = workspace
switchToCamera("Camera")

local UserInputService = game:GetService("UserInputService")

UserInputService.InputBegan:Connect(function(input)
	if input.KeyCode == Enum.KeyCode.L then
		switchToCamera("TopDownCamera")
	elseif input.KeyCode == Enum.KeyCode.P then
		workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
		workspace.CurrentCamera.CFrame = workspace.Camera.CFrame
		print("Switched back to default Camera")
	end
end)

Switch camera with TweenService

Image 1
Roblox Studio
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

-- Function to switch to a specific camera by name with tweening
local function switchToCamera(cameraName)
    local camera = workspace:FindFirstChild(cameraName)
    if camera then
        workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
        
        -- Create the tween for camera transition
        local tweenInfo = TweenInfo.new(
            2, -- Time (seconds)
            Enum.EasingStyle.Quad,
            Enum.EasingDirection.Out
        )

        local goal = {}
        goal.CFrame = camera.CFrame

        local tween = TweenService:Create(workspace.CurrentCamera, tweenInfo, goal)
        tween:Play()

        print("Switched to camera: " .. cameraName)
    else
        warn("Camera not found: " .. cameraName)
    end
end

-- Create a new camera at start that looks at the origin from above (y=50)
local topDownCamera = Instance.new("Camera")
topDownCamera.Name = "TopDownCamera"
topDownCamera.CFrame = CFrame.new(Vector3.new(0, 50, 0), Vector3.new(0, 0, 0))
topDownCamera.Parent = workspace

-- Set "Camera" as the default camera
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
workspace.CurrentCamera.CFrame = workspace.Camera.CFrame

-- Key press detection
UserInputService.InputBegan:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.L then
        switchToCamera("TopDownCamera")
    elseif input.KeyCode == Enum.KeyCode.P then
        -- Revert to the default camera instantly
        local defaultCamera = workspace:FindFirstChild("Camera")
        if defaultCamera then
            workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
            workspace.CurrentCamera.CFrame = defaultCamera.CFrame
            print("Switched back to default Camera")
        end
    end
end)