
KeylessUniversal

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local mouse = player:GetMouse()
local playerGui = player:WaitForChild("PlayerGui")
-- Main GUI
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "CameraManagerGUI"
screenGui.Parent = playerGui
screenGui.ResetOnSpawn = false
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 320, 0, 300)
frame.Position = UDim2.new(0, 60, 0, 20)
frame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
frame.BorderSizePixel = 0
frame.Parent = screenGui
-- Button creator
local function createButton(parent, text, posX, posY, width, height)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, width, 0, height)
btn.Position = UDim2.new(0, posX, 0, posY)
btn.Text = text
btn.BackgroundColor3 = Color3.fromRGB(50,50,50)
btn.TextColor3 = Color3.fromRGB(255,255,255)
btn.Parent = parent
return btn
end
-- Main buttons
local createBtn = createButton(frame,"Create",10,10,80,30)
local viewBtn = createButton(frame,"View",100,10,80,30)
local deleteBtn = createButton(frame,"Delete",190,10,80,30)
local teleportBtn = createButton(frame,"Teleport",10,50,300,30)
local highlightBtn = createButton(frame,"Highlight",10,90,300,30)
-- Toggle GUI button
local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(0,40,0,40)
toggleBtn.Position = UDim2.new(0,10,0,10)
toggleBtn.BackgroundColor3 = Color3.fromRGB(50,50,50)
toggleBtn.TextColor3 = Color3.fromRGB(255,255,255)
toggleBtn.Text = "≡"
toggleBtn.TextScaled = true
toggleBtn.Parent = screenGui
toggleBtn.ZIndex = 1
local guiVisible = true
toggleBtn.MouseButton1Click:Connect(function()
guiVisible = not guiVisible
frame.Visible = guiVisible
listFrame.Visible = guiVisible
end)
-- Camera list
local listFrame = Instance.new("ScrollingFrame")
listFrame.Size = UDim2.new(0,300,0,150)
listFrame.Position = UDim2.new(0,10,0,130)
listFrame.CanvasSize = UDim2.new(0,0,0,0)
listFrame.ScrollBarThickness = 6
listFrame.BackgroundColor3 = Color3.fromRGB(45,45,45)
listFrame.Parent = frame
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.SortOrder = Enum.SortOrder.LayoutOrder
uiListLayout.Padding = UDim.new(0,5)
uiListLayout.Parent = listFrame
-- Variables
local cameras = {}
local selectedObject = nil
local currentCamera = nil
local viewing = false
-- Highlight
local highlight = Instance.new("Highlight")
highlight.FillColor = Color3.fromRGB(0,255,0)
highlight.OutlineColor = Color3.fromRGB(0,255,0)
highlight.Enabled = false
highlight.Parent = workspace
-- Object selection
mouse.Button1Down:Connect(function()
if mouse.Target then
local obj = mouse.Target
if obj:IsA("BasePart") then
selectedObject = obj.Parent:IsA("Model") and obj.Parent or obj
-- Only enable highlight if already toggled on
if highlight.Enabled then
highlight.Adornee = selectedObject
end
end
end
end)
-- Update camera list
local function updateCameraList()
for _,child in pairs(listFrame:GetChildren()) do
if child:IsA("TextButton") then child:Destroy() end
end
for _, cam in ipairs(cameras) do
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1,0,0,30)
btn.Text = cam.name
btn.BackgroundColor3 = (currentCamera==cam.obj) and Color3.fromRGB(0,150,0) or Color3.fromRGB(60,60,60)
btn.TextColor3 = Color3.fromRGB(255,255,255)
btn.Parent = listFrame
btn.MouseButton1Click:Connect(function()
currentCamera = cam.obj
if highlight.Enabled then
highlight.Adornee = cam.obj
end
updateCameraList()
end)
end
listFrame.CanvasSize = UDim2.new(0,0,#cameras*35)
end
-- Create camera
createBtn.MouseButton1Click:Connect(function()
if selectedObject then
for _, cam in ipairs(cameras) do
if cam.obj == selectedObject then return end
end
table.insert(cameras,{obj=selectedObject, name=selectedObject.Name})
currentCamera = selectedObject
updateCameraList()
end
end)
-- View / Stop viewing camera
viewBtn.MouseButton1Click:Connect(function()
if currentCamera then
viewing = not viewing
if viewing then
workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
else
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
end
end
end)
-- Delete camera
deleteBtn.MouseButton1Click:Connect(function()
if currentCamera then
for i, cam in ipairs(cameras) do
if cam.obj==currentCamera then
table.remove(cameras,i)
break
end
end
currentCamera = nil
viewing = false
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
if highlight.Enabled then
highlight.Adornee = nil
end
updateCameraList()
end
end)
-- Teleport to camera
teleportBtn.MouseButton1Click:Connect(function()
if currentCamera then
local primary = (currentCamera:IsA("Model") and (currentCamera.PrimaryPart or currentCamera:FindFirstChildWhichIsA("BasePart"))) or currentCamera
if primary and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
player.Character.HumanoidRootPart.CFrame = primary.CFrame + Vector3.new(0,3,0)
end
end
end)
-- Toggle highlight button
highlightBtn.MouseButton1Click:Connect(function()
if selectedObject then
highlight.Enabled = not highlight.Enabled
if highlight.Enabled then
highlight.Adornee = selectedObject
else
highlight.Adornee = nil
end
end
end)
-- Update camera every frame (follow object if viewing)
game:GetService("RunService").RenderStepped:Connect(function()
if viewing and currentCamera then
local primary = (currentCamera:IsA("Model") and (currentCamera.PrimaryPart or currentCamera:FindFirstChildWhichIsA("BasePart"))) or currentCamera
if primary then
workspace.CurrentCamera.CFrame = CFrame.new(primary.Position + Vector3.new(0,5,10), primary.Position)
end
end
end)No comments yet for this script.



