Run it
Copy the script and paste it into your executor.
Players = :()
UserInputService = :()
RunService = :()
CoreGui = :()
player = Players.LocalPlayer
character = player.Character player.CharacterAdded:()
mouse = player:()
camera = .CurrentCamera
MAX_CAMERAS =
PLACEMENT_KEY = .KeyCode.C
VIEW_TOGGLE_KEY = .KeyCode.V
DELETE_KEY = .KeyCode.X
PERSPECTIVE_TOGGLE_KEY = .KeyCode.T
MAX_VERTICAL_ANGLE = .()
THIRD_PERSON_DISTANCE =
CAMERA_LOOK_SPEED =
cameras = {}
viewingCamera =
currentCameraIndex =
originalCameraCFrame =
cameraRotationX =
cameraRotationY =
thirdPersonMode =
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.IgnoreGuiInset =
(() screenGui.Parent = CoreGui )
mainFrame = .()
mainFrame.Size = .(, , , )
mainFrame.Position = .(, -, , -)
mainFrame.BackgroundColor3 = .(, , )
mainFrame.BorderSizePixel =
mainFrame.Active =
mainFrame.Draggable =
mainFrame.Parent = screenGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = mainFrame
title = .()
title.Size = .(, , , )
title.BackgroundColor3 = .(, , )
title.BorderSizePixel =
title.Text =
title.TextColor3 = .(, , )
title.TextSize =
title.Font = .Font.GothamBold
title.Parent = mainFrame
instructions = .()
instructions.Size = .(, -, , )
instructions.Position = .(, , , )
instructions.BackgroundTransparency =
instructions.Text =
instructions.TextColor3 = .(, , )
instructions.TextSize =
instructions.Font = .Font.Gotham
instructions.TextWrapped =
instructions.TextXAlignment = .TextXAlignment.Left
instructions.TextYAlignment = .TextYAlignment.Top
instructions.Parent = mainFrame
listFrame = .()
listFrame.Size = .(, -, , -)
listFrame.Position = .(, , , )
listFrame.BackgroundColor3 = .(, , )
listFrame.BorderSizePixel =
listFrame.ScrollBarThickness =
listFrame.Parent = mainFrame
listLayout = .()
listLayout.Padding = .(, )
listLayout.Parent = listFrame
statusLabel = .()
statusLabel.Size = .(, -, , )
statusLabel.Position = .(, , , -)
statusLabel.BackgroundTransparency =
statusLabel.Text =
statusLabel.TextColor3 = .(, , )
statusLabel.TextSize =
statusLabel.Font = .Font.GothamBold
statusLabel.Parent = mainFrame
(text, color)
statusLabel.Text = text
statusLabel.TextColor3 = color .(, , )
(position)
cameraPart = .()
cameraPart.Size = .(, , )
cameraPart.Position = position
cameraPart.Anchored =
cameraPart.CanCollide =
cameraPart.Material = .Material.Neon
cameraPart.Color = .(, , )
cameraPart.Name =
cameraPart.Parent =
cameraPart
()
_, child (listFrame:())
child:() child:()
i, cam (cameras)
container = .()
container.Size = .(, -, , )
container.BackgroundTransparency =
container.Parent = listFrame
button = .()
button.Size = .(, -, , )
button.BackgroundColor3 = .(, , )
button.BorderSizePixel =
button.Text = .. i
button.TextColor3 = .(, , )
button.TextSize =
button.Font = .Font.Gotham
button.Parent = container
button.MouseButton1Click:(()
(i)
)
deleteBtn = .()
deleteBtn.Size = .(, , , )
deleteBtn.Position = .(, -, , )
deleteBtn.BackgroundColor3 = .(, , )
deleteBtn.BorderSizePixel =
deleteBtn.Text =
deleteBtn.TextColor3 = .(, , )
deleteBtn.TextSize =
deleteBtn.Font = .Font.GothamBold
deleteBtn.Parent = container
deleteBtn.MouseButton1Click:(()
cameras[i] cameras[i].part cameras[i].part:()
.(cameras, i)
()
(, .(, , ))
currentCameraIndex == i ()
)
listFrame.CanvasSize = .(, , , #cameras * )
()
#cameras >= MAX_CAMERAS
(, .(, , ))
target = mouse.Hit.Position
cameraPart = (target)
.(cameras, {part = cameraPart, position = cameraPart.Position})
()
( .. #cameras .. , .(, , ))
(index)
cameras[index]
viewingCamera originalCameraCFrame = camera.CFrame
viewingCamera =
currentCameraIndex = index
cameraRotationX =
cameraRotationY =
camera.CameraType = .CameraType.Scriptable
( .. index, .(, , ))
()
viewingCamera
camera.CameraType = .CameraType.Custom
viewingCamera =
currentCameraIndex =
(, .(, , ))
()
#cameras ==
char = player.Character
char char:()
playerPos = char.HumanoidRootPart.Position
nearestIndex, nearestDist = , .huge
i, cam (cameras)
dist = (cam.part.Position - playerPos).Magnitude
dist < nearestDist
nearestDist = dist
nearestIndex = i
nearestIndex nearestDist <
cameras[nearestIndex].part:()
.(cameras, nearestIndex)
()
(, .(, , ))
currentCameraIndex == nearestIndex ()
UserInputService.InputBegan:((input, gpe)
gpe
input.KeyCode == PLACEMENT_KEY
()
input.KeyCode == VIEW_TOGGLE_KEY
viewingCamera ()
#cameras > () (, .(,,))
input.KeyCode == DELETE_KEY
()
input.KeyCode == PERSPECTIVE_TOGGLE_KEY
thirdPersonMode = thirdPersonMode
(thirdPersonMode , .(, , ))
input.KeyCode.Value >= .KeyCode.One.Value input.KeyCode.Value <= .KeyCode.Nine.Value
index = input.KeyCode.Value - .KeyCode.One.Value +
cameras[index] (index)
)
RunService.RenderStepped:(()
viewingCamera currentCameraIndex cameras[currentCameraIndex]
cam = cameras[currentCameraIndex]
cam.part cam.part.Parent
cam.position = cam.part.Position
UserInputService:(.KeyCode.Q)
cameraRotationX = .(cameraRotationX + CAMERA_LOOK_SPEED, -MAX_VERTICAL_ANGLE, MAX_VERTICAL_ANGLE)
UserInputService:(.KeyCode.E)
cameraRotationX = .(cameraRotationX - CAMERA_LOOK_SPEED, -MAX_VERTICAL_ANGLE, MAX_VERTICAL_ANGLE)
UserInputService:(.KeyCode.R)
cameraRotationY = cameraRotationY - CAMERA_LOOK_SPEED
UserInputService:(.KeyCode.F)
cameraRotationY = cameraRotationY + CAMERA_LOOK_SPEED
lookCFrame = .(, cameraRotationY, ) * .(cameraRotationX, , )
thirdPersonMode
camPos = cam.position - (lookCFrame.LookVector * THIRD_PERSON_DISTANCE)
camera.CFrame = .(camPos, cam.position)
camera.CFrame = .(cam.position) * lookCFrame
)
()
(, .(, , ))(ai made sorry i cant code) pretty simple it creates a gui and allows you to place cameras at your mouse with C and you can place em on players or whatever u want look through the cameras with V and when viewing through them look around with Q- up E - down R- right F - left you can delete them from the console and also view them by clicking on the camera in the gui

Universal