Run it
Copy the script and paste it into your executor.
TweenService = :()
Players = :()
RunService = :()
player = Players.LocalPlayer
camera = .CurrentCamera
screenGui = .()
screenGui.ResetOnSpawn =
screenGui.Parent = player:()
spectateButton = .()
spectateButton.Size = .(, , , )
spectateButton.Position = .(, , , -)
spectateButton.BackgroundColor3 = .(, , )
spectateButton.TextColor3 = .(, , )
spectateButton.Text =
spectateButton.Font = .Font.SourceSansBold
spectateButton.TextScaled =
spectateButton.AutoButtonColor =
.(, spectateButton)
spectateButton.Parent = screenGui
spectateFrame = .()
spectateFrame.Size = .(, , , )
spectateFrame.Position = .(, , , -)
spectateFrame.BackgroundColor3 = .(, , )
spectateFrame.Visible =
.(, spectateFrame)
spectateFrame.Parent = screenGui
leftArrow = .()
leftArrow.Size = .(, , , )
leftArrow.Position = .(, , , )
leftArrow.BackgroundColor3 = .(, , )
leftArrow.TextColor3 = .(, , )
leftArrow.Text =
leftArrow.Font = .Font.SourceSansBold
leftArrow.TextScaled =
.(, leftArrow)
leftArrow.Parent = spectateFrame
rightArrow = .()
rightArrow.Size = .(, , , )
rightArrow.Position = .(, -, , )
rightArrow.BackgroundColor3 = .(, , )
rightArrow.TextColor3 = .(, , )
rightArrow.Text =
rightArrow.Font = .Font.SourceSansBold
rightArrow.TextScaled =
.(, rightArrow)
rightArrow.Parent = spectateFrame
playerNameLabel = .()
playerNameLabel.Size = .(, -, , )
playerNameLabel.Position = .(, , , )
playerNameLabel.BackgroundTransparency =
playerNameLabel.TextColor3 = .(, , )
playerNameLabel.Font = .Font.SourceSansBold
playerNameLabel.TextScaled =
playerNameLabel.Text =
playerNameLabel.Parent = spectateFrame
teleportButton = .()
teleportButton.Size = .(, , , )
teleportButton.Position = .(, -, , -)
teleportButton.BackgroundColor3 = .(, , )
teleportButton.TextColor3 = .(, , )
teleportButton.Text =
teleportButton.Font = .Font.SourceSansBold
teleportButton.TextScaled =
.(, teleportButton)
teleportButton.Parent = spectateFrame
spectating =
currentIndex =
spectatePlayers = {}
()
spectatePlayers = {}
_, plr (Players:())
plr ~= player
.(spectatePlayers, plr)
(target)
target
target.Character
target.Character:()
target.Character.Humanoid.Health >
(target)
target target.Team ~= player.Team
playerNameLabel.TextColor3 = .(, , )
playerNameLabel.TextColor3 = .(, , )
(newName)
tweenInfo = TweenInfo.(, .EasingStyle.Quad, .EasingDirection.Out)
fadeOut = TweenService:(playerNameLabel, tweenInfo, {TextTransparency = })
fadeOut:()
fadeOut.Completed:()
playerNameLabel.Text = newName
fadeIn = TweenService:(playerNameLabel, tweenInfo, {TextTransparency = })
fadeIn:()
(target)
(target)
camera.CameraSubject = target.Character.Humanoid
camera.CameraType = .CameraType.Custom
(target.Name)
(target)
#spectatePlayers >
startIndex = currentIndex
currentIndex = currentIndex +
currentIndex > #spectatePlayers currentIndex =
currentIndex == startIndex
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
playerNameLabel.Text =
playerNameLabel.TextColor3 = .(, , )
camera.CameraSubject = player.Character:()
playerNameLabel.Text =
playerNameLabel.TextColor3 = .(, , )
camera.CameraSubject = player.Character:()
spectateButton.MouseButton1Click:(()
spectating = spectating
spectateFrame.Visible = spectating
()
spectating
spectatePlayers[currentIndex] (spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
i, plr (spectatePlayers)
(plr)
currentIndex = i
(plr)
player.Character player.Character:()
camera.CameraSubject = player.Character.Humanoid
)
leftArrow.MouseButton1Click:(()
#spectatePlayers >
currentIndex = currentIndex -
currentIndex < currentIndex = #spectatePlayers
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
)
rightArrow.MouseButton1Click:(()
#spectatePlayers >
currentIndex = currentIndex +
currentIndex > #spectatePlayers currentIndex =
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
)
teleportButton.MouseButton1Click:(()
target = spectatePlayers[currentIndex]
target (target) target.Character target.Character:()
hrp = player.Character player.Character:()
hrp
hrp.CFrame = target.Character.HumanoidRootPart.CFrame + .(,,)
)
Players.PlayerAdded:(updatePlayerList)
Players.PlayerRemoving:(updatePlayerList)
RunService.RenderStepped:(()
spectating #spectatePlayers >
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
(spectatePlayers[currentIndex])
)
()*NEW ANIMATIONS* Middle-left “Spectate” toggle button. Pop-up UI with left/right arrows and player name label. Cycle through all alive players. Remembers last spectated player when toggled off/on. Automatically skips dead players. Name turns red if the spectated player is on a different team. Updates dynamically when players join, leave, or die. Smooth edges on all GUI elements. Camera follows the Humanoid of the spectated player.

Universal