Dragging Gui Help

	frame.Position = UDim2.new(0,Mouse.X - (workspace.CurrentCamera.ViewportSize.X * 0.1375),0,Mouse.Y + (workspace.CurrentCamera.ViewportSize.Y * 0.18)) 

This worked for me in studio, should work for you. Set the AnchorPoint of the “RoPainter” GUI to 0.5, 0.5 and it should be set.

1 Like

I will test in a sec hold on :grinning_face_with_smiling_eyes:

1 Like
local Player = game:GetService("Players").LocalPlayer
local Mouse = Player:GetMouse()

local UserInputService = game:GetService('UserInputService')

local hold = false

function inputBegan(input)
	local inputType = input.UserInputType
	if inputType == Enum.UserInputType.MouseButton1 then
		hold = true
	end
end

function inputEnded(input)
	local inputType = input.UserInputType
	if inputType == Enum.UserInputType.MouseButton1 then
		hold = false
	end
end

UserInputService.InputBegan:Connect(inputBegan)
UserInputService.InputEnded:Connect(inputEnded)


game:GetService("RunService").RenderStepped:Connect(function()
	if hold then
		if Mouse then
			local x, y = Mouse.X, Mouse.Y
			script.Parent.Parent.Position = UDim2.new(0,x,0,y)
		end
	end
end)
local UIS = game:GetService("UserInputService")
local function dragify(Frame)
    local startPos = Frame.Position or nil
    dragToggle = nil
    local dragSpeed = 0.50 --- or modify the drag speed you want it to be.
    dragInput = nil
    dragStart = nil
    local dragPos = nil
    function updateInput(input)
        local Delta = input.Position - dragStart
        local Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + Delta.X, startPos.Y.Scale, startPos.Y.Offset + Delta.Y)
        game:GetService("TweenService"):Create(Frame, TweenInfo.new(0.30), {Position = Position}):Play()
    end
    Frame.InputBegan:Connect(function(input)
        if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and UIS:GetFocusedTextBox() == nil then
            dragToggle = true
            dragStart = input.Position
            startPos = Frame.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragToggle = false
                end
            end)
        end
    end)
    Frame.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            dragInput = input
        end
    end)
    game:GetService("UserInputService").InputChanged:Connect(function(input)
        if input == dragInput and dragToggle then
            updateInput(input)
        end
    end)
end

local frame = script.Parent

dragify(frame)

This will make your frame dragify smoothly.

1 Like
Frame.Active = true
Frame.Draggable = true

Draggable is deprecated but may work for you

And I’m pretty sure there’s some modules that might be more useful

Also if you wanna use your own code make sure to use loops and break the loop when the mouse leaves

2 Likes

Maybe it’s because it’s using scale instead of offset when changing the position of the gui? Would the mouse position use scale or offset?