
KeylessUniversal

-- Camera Snap to Nearest Player Script with UI for Lock Mode Selection, Background, Minimize, and Close Buttons
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local localPlayer = Players.LocalPlayer
local camera = game.Workspace.CurrentCamera
local enabled = false -- Toggle state
local lockedTarget = nil -- Stores the locked-on player
local lockMode = "Nearest" -- Default lock mode ("Nearest" or "Camera")
-- Create UI
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = localPlayer:FindFirstChildOfClass("PlayerGui")
-- Background frame for the UI
local backgroundFrame = Instance.new("Frame")
backgroundFrame.Size = UDim2.new(0, 200, 0, 100)
backgroundFrame.Position = UDim2.new(0, 10, 0, 10)
backgroundFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
backgroundFrame.BackgroundTransparency = 0.5
backgroundFrame.Parent = screenGui
-- Header bar for dragging the UI
local dragBar = Instance.new("Frame")
dragBar.Size = UDim2.new(1, 0, 0, 30) -- Full width, 30px height
dragBar.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
dragBar.Parent = backgroundFrame
-- Close Button (X)
local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 30, 0, 30)
closeButton.Position = UDim2.new(1, -35, 0, 5)
closeButton.Text = "X"
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.BackgroundTransparency = 1
closeButton.Parent = dragBar
-- Minimize Button (-)
local minimizeButton = Instance.new("TextButton")
minimizeButton.Size = UDim2.new(0, 30, 0, 30)
minimizeButton.Position = UDim2.new(1, -70, 0, 5)
minimizeButton.Text = "-"
minimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeButton.BackgroundTransparency = 1
minimizeButton.Parent = dragBar
-- Minimize Button functionality
local minimized = false
local minimizeButtonClicked = false
local minimizeIcon = Instance.new("TextButton")
minimizeIcon.Size = UDim2.new(0, 30, 0, 30)
minimizeIcon.Position = UDim2.new(0, 10, 0, 10)
minimizeIcon.Text = "+"
minimizeIcon.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeIcon.BackgroundTransparency = 1
minimizeIcon.Visible = false
minimizeIcon.Parent = screenGui
minimizeButton.MouseButton1Click:Connect(function()
if minimized then
backgroundFrame.Visible = true
minimizeIcon.Visible = false
else
backgroundFrame.Visible = false
minimizeIcon.Visible = true
end
minimized = not minimized
end)
minimizeIcon.MouseButton1Click:Connect(function()
backgroundFrame.Visible = true
minimizeIcon.Visible = false
minimized = false
end)
-- Lock Mode Dropdown button
local lockModeDropdown = Instance.new("TextButton")
lockModeDropdown.Size = UDim2.new(0, 180, 0, 50)
lockModeDropdown.Position = UDim2.new(0, 10, 0, 40)
lockModeDropdown.Text = "Lock Mode: Nearest"
lockModeDropdown.TextColor3 = Color3.fromRGB(255, 255, 255)
lockModeDropdown.Parent = backgroundFrame
local function getNearestPlayerToCenter()
local nearestPlayer = nil
local nearestDistance = math.huge
local screenCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2)
for _, player in ipairs(Players:GetPlayers()) do
if player ~= localPlayer and player.Character and player.Character:FindFirstChild("Head") then
local part = player.Character["Head"]
local screenPoint, onScreen = camera:WorldToViewportPoint(part.Position)
if onScreen then
local distance = (Vector2.new(screenPoint.X, screenPoint.Y) - screenCenter).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestPlayer = part
end
end
end
end
return nearestPlayer
end
local function getNearestPlayerToMe()
local nearestPlayer = nil
local nearestDistance = math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= localPlayer and player.Character and player.Character:FindFirstChild("Head") then
local part = player.Character["Head"]
local distance = (localPlayer.Character.HumanoidRootPart.Position - part.Position).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestPlayer = part
end
end
end
return nearestPlayer
end
local function snapCameraToTarget()
if enabled then
if lockMode == "Nearest" then
-- Lock to nearest player to the local player
lockedTarget = getNearestPlayerToMe()
if lockedTarget then
camera.CFrame = CFrame.new(camera.CFrame.Position, lockedTarget.Position)
end
elseif lockMode == "Camera" then
-- Lock to nearest player to the center of the screen
if lockedTarget == nil then
lockedTarget = getNearestPlayerToCenter() -- Lock on first time when camera mode is selected
end
if lockedTarget then
camera.CFrame = CFrame.new(camera.CFrame.Position, lockedTarget.Position)
end
end
end
end
-- Lock Mode selection functionality
lockModeDropdown.MouseButton1Click:Connect(function()
-- Toggle between "Nearest" and "Camera"
if lockMode == "Nearest" then
lockMode = "Camera"
lockModeDropdown.Text = "Lock Mode: Camera"
else
lockMode = "Nearest"
lockModeDropdown.Text = "Lock Mode: Nearest"
lockedTarget = nil -- Reset locked target when switching to Nearest
end
end)
-- Draggable UI logic
local dragging = false
local dragStart = nil
local startPos = nil
dragBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = backgroundFrame.Position
end
end)
dragBar.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
backgroundFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
dragBar.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = false
end
end)
-- Close button behavior (X)
closeButton.MouseButton1Click:Connect(function()
screenGui:Destroy() -- Close the entire script/UI
end)
UIS.InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed and input.KeyCode == Enum.KeyCode.T then -- Toggle with 'T'
enabled = not enabled
if not enabled then
lockedTarget = nil -- Release lock when toggling off
end
end
end)
RunService.RenderStepped:Connect(snapCameraToTarget)



Patch (1.1)