Universal Invesible Cleaner
Key RequiredUniversal

Universal Invesible Cleaner

Universal ScriptMartikMartik 1.1K views 771 executesUpdated Apr 3, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•166 lines (4528 chars)
local player = game.Players.LocalPlayer
local UIS = game:GetService("UserInputService")

local RADIUS = 60
local enabled = false
local modified = {}

local gui = Instance.new("ScreenGui")
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local frame = Instance.new("Frame", gui)
frame.Size = UDim2.new(0, 240, 0, 100)
frame.Position = UDim2.new(0, 100, 0, 100)
frame.BackgroundColor3 = Color3.fromRGB(25,25,25)
frame.BorderSizePixel = 0

local corner = Instance.new("UICorner", frame)
corner.CornerRadius = UDim.new(0, 10)

local title = Instance.new("TextLabel", frame)
title.Size = UDim2.new(1, 0, 0, 30)
title.Text = "Invisible Cleaner"
title.TextColor3 = Color3.new(1,1,1)
title.BackgroundTransparency = 1
title.Font = Enum.Font.GothamBold
title.TextSize = 16

local button = Instance.new("TextButton", frame)
button.Size = UDim2.new(1, -20, 0, 40)
button.Position = UDim2.new(0, 10, 0, 45)
button.Text = "OFF"
button.BackgroundColor3 = Color3.fromRGB(40,40,40)
button.TextColor3 = Color3.new(1,1,1)
button.Font = Enum.Font.GothamBold
button.TextSize = 14

local btnCorner = Instance.new("UICorner", button)
btnCorner.CornerRadius = UDim.new(0, 8)

-- ss
local dragging = false
local dragInput, dragStart, startPos

frame.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging = true
        dragStart = input.Position
        startPos = frame.Position
        
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then
                dragging = false
            end
        end)
    end
end)

frame.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement then
        dragInput = input
    end
end)

UIS.InputChanged:Connect(function(input)
    if input == dragInput and dragging then
        local delta = input.Position - dragStart
        frame.Position = UDim2.new(
            startPos.X.Scale,
            startPos.X.Offset + delta.X,
            startPos.Y.Scale,
            startPos.Y.Offset + delta.Y
        )
    end
end)

-- work
local function restore(part)
    local data = modified[part]
    if data and part and part.Parent then
        part.CanCollide = data.CanCollide
        part.Transparency = data.Transparency
    end
    modified[part] = nil
end

local function restoreAll()
    for part in pairs(modified) do
        restore(part)
    end
end

button.MouseButton1Click:Connect(function()
    enabled = not enabled
    
    if not enabled then
        restoreAll()
    end
    
    button.Text = enabled and "ON" or "OFF"
    button.BackgroundColor3 = enabled and Color3.fromRGB(0,170,0) or Color3.fromRGB(40,40,40)
end)

UIS.InputBegan:Connect(function(input, gp)
    if not gp and input.KeyCode == Enum.KeyCode.Insert then
        frame.Visible = not frame.Visible
    end
end)

local function isCharacterPart(part)
    local model = part:FindFirstAncestorOfClass("Model")
    return model and model:FindFirstChildOfClass("Humanoid")
end

local function process(part, rootPos)
    if not part:IsA("BasePart") then return end
    if part.CanCollide then return end
    if isCharacterPart(part) then return end
    if (part.Position - rootPos).Magnitude > RADIUS then return end

    if not modified[part] then
        modified[part] = {
            CanCollide = part.CanCollide,
            Transparency = part.Transparency
        }
        part.Transparency = 1
    end
end

workspace.DescendantAdded:Connect(function(obj)
    if not enabled then return end
    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if root then
        process(obj, root.Position)
    end
end)

task.spawn(function()
    while true do
        local char = player.Character
        local root = char and char:FindFirstChild("HumanoidRootPart")

        if root then
            local pos = root.Position

            if enabled then
                for _, part in ipairs(workspace:GetPartBoundsInRadius(pos, RADIUS)) do
                    process(part, pos)
                end
            end

            for part in pairs(modified) do
                if not part or not part.Parent then
                    modified[part] = nil
                else
                    if (part.Position - pos).Magnitude > RADIUS or not enabled then
                        restore(part)
                    end
                end
            end
        end

        task.wait(0.2)
    end
end)

Features & Information

Invisible Cleaner — Smart Invisible Obstacle Remover A powerful and optimized tool for Roblox that automatically detects and removes invisible or non-collidable obstacles around your character without breaking the game or affecting other players. > Removes only nearby invisible parts > Does not affect characters or player skins > Automatically restores everything when disabled or when you move away > Real-time processing with high performance > Clean and draggable GUI interface > Toggle visibility with the Insert key > Smart optimization — no unnecessary lag Perfect for smooth movement without invisible walls or annoying map issues.

Community Comments (1)

elisei9992elisei9992Aug 7, 2026

good

More Scripts for Universal Scripts