-- Mobile + PC Fly Hub (LocalScript) local player = game.Players.LocalPlayer local char = player.Character or player.CharacterAdded:Wait() local humanoid = char:WaitForChild("Humanoid") local hrp = char:WaitForChild("HumanoidRootPart") local RunService = game:GetService("RunService") -- GUI local gui = Instance.new("ScreenGui") gui.Name = "FlyHub" gui.ResetOnSpawn = false gui.Parent = player.PlayerGui -- Startup Text (Bottom Right) local toast = Instance.new("TextLabel") toast.Parent = gui toast.Size = UDim2.new(0, 220, 0, 40) toast.Position = UDim2.new(1, -230, 1, -50) toast.BackgroundColor3 = Color3.fromRGB(20, 20, 20) toast.BackgroundTransparency = 0.2 toast.Text = "4nuj mini hub" toast.TextColor3 = Color3.new(1, 1, 1) toast.Font = Enum.Font.GothamBold toast.TextSize = 18 toast.TextTransparency = 0 toast.ZIndex = 5 Instance.new("UICorner", toast) -- Auto remove after 3 seconds task.delay(3, function() if toast then toast:Destroy() end end) local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0, 220, 0, 180) frame.Position = UDim2.new(0.35, 0, 0.35, 0) -- Goku Random Background frame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) local bgImage = Instance.new("ImageLabel") bgImage.Parent = frame bgImage.Size = UDim2.new(1, 0, 1, 0) bgImage.Position = UDim2.new(0, 0, 0, 0) bgImage.BackgroundTransparency = 1 bgImage.ImageTransparency = 0.15 bgImage.ScaleType = Enum.ScaleType.Crop bgImage.ZIndex = 0 -- 🔥 Goku Image Asset IDs (replace with real ones) local gokuImages = { "rbxassetid://1234567890", "rbxassetid://1234567891", "rbxassetid://1234567892" } bgImage.Image = gokuImages[math.random(1, #gokuImages)] frame.BorderSizePixel = 0 Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10) -- Toggle Button local toggle = Instance.new("TextButton", frame) toggle.ZIndex = 2 toggle.Size = UDim2.new(1, -20, 0, 50) toggle.Position = UDim2.new(0, 10, 0, 10) toggle.Text = "FLY : OFF" toggle.BackgroundColor3 = Color3.fromRGB(60, 60, 60) toggle.TextColor3 = Color3.new(1, 1, 1) toggle.Font = Enum.Font.GothamBold toggle.TextSize = 18 Instance.new("UICorner", toggle) -- Up Button local up = Instance.new("TextButton", frame) up.ZIndex = 2 up.Size = UDim2.new(0.45, 0, 0, 40) up.Position = UDim2.new(0.05, 0, 0, 80) up.Text = "UP" up.BackgroundColor3 = Color3.fromRGB(70, 70, 70) up.TextColor3 = Color3.new(1, 1, 1) up.Font = Enum.Font.GothamBold up.TextSize = 16 Instance.new("UICorner", up) -- Down Button local down = Instance.new("TextButton", frame) down.ZIndex = 2 down.Size = UDim2.new(0.45, 0, 0, 40) down.Position = UDim2.new(0.5, 0, 0, 80) down.Text = "DOWN" down.BackgroundColor3 = Color3.fromRGB(70,70,70) down.TextColor3 = Color3.new(1,1,1) down.Font = Enum.Font.GothamBold down.TextSize = 16 Instance.new("UICorner", down) -- Free Look Button local freeLookBtn = Instance.new("TextButton", frame) freeLookBtn.Size = UDim2.new(1, -20, 0, 40) freeLookBtn.Position = UDim2.new(0, 10, 0, 130) freeLookBtn.Text = "FREE LOOK : OFF" freeLookBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) freeLookBtn.TextColor3 = Color3.new(1,1,1) freeLookBtn.Font = Enum.Font.GothamBold freeLookBtn.TextSize = 16 freeLookBtn.ZIndex = 2 Instance.new("UICorner", freeLookBtn) -- Wall Walk Button local wallBtn = Instance.new("TextButton", frame) wallBtn.Size = UDim2.new(1, -20, 0, 35) wallBtn.Position = UDim2.new(0, 10, 0, 175) wallBtn.Text = "WALL WALK : OFF" wallBtn.BackgroundColor3 = Color3.fromRGB(90,90,90) wallBtn.TextColor3 = Color3.new(1,1,1) wallBtn.Font = Enum.Font.GothamBold wallBtn.TextSize = 14 wallBtn.ZIndex = 2 Instance.new("UICorner", wallBtn) -- Fly Variables local flying = false local bodyGyro, bodyVelocity local upHeld, downHeld = false, false local speed = 50 -- Wall Walk Variables local wallWalk = false local wallAlign local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Blacklist rayParams.FilterDescendantsInstances = {char} -- Free Look Variables local freeLook = false local savedCameraType local UserInputService = game:GetService("UserInputService") -- Fly Loop RunService.RenderStepped:Connect(function() if wallWalk then local ray = workspace:Raycast(hrp.Position, hrp.CFrame.LookVector * 3, rayParams) if ray then if not wallAlign then wallAlign = Instance.new("AlignOrientation", hrp) wallAlign.MaxTorque = math.huge wallAlign.Responsiveness = 25 end wallAlign.CFrame = CFrame.lookAt(hrp.Position, hrp.Position + ray.Normal) humanoid:ChangeState(Enum.HumanoidStateType.Physics) end elseif wallAlign then wallAlign:Destroy() wallAlign = nil end if flying and bodyVelocity and bodyGyro then local cam = workspace.CurrentCamera local moveDir = humanoid.MoveDirection local vertical = 0 if upHeld then vertical = 1 end if downHeld then vertical = -1 end bodyVelocity.Velocity = ( cam.CFrame.RightVector * moveDir.X + cam.CFrame.LookVector * moveDir.Z + Vector3.new(0, vertical, 0) ) * speed if not freeLook then bodyGyro.CFrame = cam.CFrame end end end) -- Toggle Fly toggle.MouseButton1Click:Connect(function() if not flying then flying = true toggle.Text = "FLY : ON" bodyGyro = Instance.new("BodyGyro", hrp) bodyGyro.P = 9e4 bodyGyro.MaxTorque = Vector3.new(9e9,9e9,9e9) bodyVelocity = Instance.new("BodyVelocity", hrp) bodyVelocity.MaxForce = Vector3.new(9e9,9e9,9e9) humanoid.PlatformStand = true else flying = false toggle.Text = "FLY : OFF" if bodyGyro then bodyGyro:Destroy() end if bodyVelocity then bodyVelocity:Destroy() end humanoid.PlatformStand = false -- Reset Free Look if freeLook then workspace.CurrentCamera.CameraType = savedCameraType UserInputService.MouseBehavior = Enum.MouseBehavior.Default freeLook = false freeLookBtn.Text = "FREE LOOK : OFF" end end end) -- Free Look Toggle freeLookBtn.MouseButton1Click:Connect(function() if not flying then return end freeLook = not freeLook if freeLook then savedCameraType = workspace.CurrentCamera.CameraType workspace.CurrentCamera.CameraType = Enum.CameraType.Custom UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter freeLookBtn.Text = "FREE LOOK : ON" else workspace.CurrentCamera.CameraType = savedCameraType UserInputService.MouseBehavior = Enum.MouseBehavior.Default freeLookBtn.Text = "FREE LOOK : OFF" end end) -- Wall Walk Toggle wallBtn.MouseButton1Click:Connect(function() wallWalk = not wallWalk wallBtn.Text = wallWalk and "WALL WALK : ON" or "WALL WALK : OFF" if not wallWalk and wallAlign then wallAlign:Destroy() wallAlign = nil humanoid:ChangeState(Enum.HumanoidStateType.Running) end end) -- Up / Down Hold (Mobile & PC) up.MouseButton1Down:Connect(function() upHeld = true end) up.MouseButton1Up:Connect(function() upHeld = false end) down.MouseButton1Down:Connect(function() downHeld = true end) down.MouseButton1Up:Connect(function() downHeld = false end)