local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local PRESET = 2 local gui = Instance.new("ScreenGui") gui.Name = "PaperDollGlider" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.Parent = player:WaitForChild("PlayerGui") local uiScale = Instance.new("UIScale") uiScale.Parent = gui uiScale.Scale = math.clamp(workspace.CurrentCamera.ViewportSize.Y / 1080, 0.75, 1.25) local frame = Instance.new("Frame") frame.BackgroundTransparency = 1 frame.BorderSizePixel = 0 frame.Parent = gui if PRESET == 1 then frame.Size = UDim2.new(0, 420, 0, 520) frame.Position = UDim2.new(0, 120, 1, -320) else frame.Size = UDim2.new(0, 260, 0, 360) frame.Position = UDim2.new(0, 10, 0, 10) end local viewport = Instance.new("ViewportFrame") viewport.Size = UDim2.new(1,0,1,0) viewport.BackgroundTransparency = 1 viewport.Parent = frame local camera = Instance.new("Camera") viewport.CurrentCamera = camera camera.Parent = viewport local function createPaperDoll() local character = player.Character or player.CharacterAdded:Wait() character.Archivable = true local clone = character:Clone() for _,v in pairs(clone:GetDescendants()) do if v:IsA("Script") or v:IsA("LocalScript") then v:Destroy() end end clone.Parent = viewport clone:SetPrimaryPartCFrame(CFrame.new(0,0,0)) return clone end local model = createPaperDoll() local camOffset = Vector3.new(0,2,8) local camRotation = Vector2.new(0,0) local modelRotationY = 0 local dragging = false local rotatingModel = false local locked = false local tapCount = 0 local lastTap = 0 viewport.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local now = tick() if now - lastTap < 0.5 then tapCount += 1 else tapCount = 1 end lastTap = now if tapCount >= 4 then locked = not locked tapCount = 0 end if not locked then if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then rotatingModel = true else dragging = true end end end end) viewport.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false rotatingModel = false end end) UserInputService.InputChanged:Connect(function(input) if locked then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then if dragging then camRotation += Vector2.new(-input.Delta.X * 0.2, -input.Delta.Y * 0.2) elseif rotatingModel then modelRotationY -= input.Delta.X * 0.5 end end end) RunService.RenderStepped:Connect(function() if not model or not model.PrimaryPart then return end model:SetPrimaryPartCFrame( CFrame.new(0,0,0) * CFrame.Angles(0, math.rad(modelRotationY), 0) ) local torso = model:FindFirstChild("UpperTorso") or model:FindFirstChild("Torso") if torso then local focus = torso.Position + Vector3.new(0,1,0) local rotationCFrame = CFrame.Angles(math.rad(camRotation.Y), math.rad(camRotation.X), 0) local camPos = focus + rotationCFrame:VectorToWorldSpace(camOffset) camera.CFrame = CFrame.new(camPos, focus) end end) player.CharacterAdded:Connect(function() if model then model:Destroy() end model = createPaperDoll() end)