I’m trying to make my own camera system but I’m having trouble making it so that it rotated around the character. The issue is that I have no idea how to make it so that it took in consideration where the camera already is and rotated from that point. I use CFrame.Angles() for the rotation. Any help would be appreciated
1 Like
You should be using TweenService to move the camera.
Here is an example:
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local target = player.Character.HumanoidRootPart
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.Focus = target.CFrame
local rotationAngle = Instance.new("NumberValue")
local tweenComplete = false
local cameraOffset = Vector3.new(0, 0, 12)
local rotationTime = 4 -- Time in seconds
local rotationDegrees = 360
local rotationRepeatCount = -1 -- Use -1 for infinite repeats
local lookAtTarget = false -- Whether the camera tilts to point directly at the target
local function updateCamera()
local rotatedCFrame = CFrame.new(target.Position) * CFrame.Angles(0, math.rad(rotationAngle.Value), 0)
camera.CFrame = rotatedCFrame:ToWorldSpace(CFrame.new(cameraOffset))
if lookAtTarget == true then
camera.CFrame = CFrame.new(camera.CFrame.Position, target.Position)
end
end
-- Set up and start rotation tween
local tweenInfo = TweenInfo.new(rotationTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, rotationRepeatCount)
local tween = TweenService:Create(rotationAngle, tweenInfo, {Value=rotationDegrees})
tween.Completed:Connect(function()
tweenComplete = true
end)
tween:Play()
-- Update camera position while tween runs
RunService.RenderStepped:Connect(function()
if tweenComplete == false then
updateCamera()
end
end)
1 Like