Gyroscope or gyro aim made by Grok
Key RequiredUniversal

Gyroscope or gyro aim made by Grok

Universal ScriptNPCNOkNPCNOk 969 views 524 executesUpdated Jan 19, 2026
3.8/ 5(4 votes)
3175% Positive
Lua Script•162 lines (5311 chars)
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable

-- Detect if gyroscope is available
local useGyro = UserInputService.TouchEnabled and UserInputService.GyroscopeEnabled

-- Gyro settings (only used when gyroscope is available)
local invertLook = false    -- Most devices need true in landscape
local invertPitch = false
local invertYaw = true
local maxPitch = math.rad(89)

-- Touch settings
local TOUCH_SENSITIVITY = 0.004  -- Adjust for faster/slower turning (0.003–0.006 recommended)
local invertTouchPitch = true    -- <<< NEW: Set to true to fix inverted up/down (swipe up = look up, swipe down = look down)
                                 -- If it still feels wrong after testing, change to false

-- Rotation variables
local offsetPitch = 0  -- Touch offset when gyro is active
local offsetYaw = 0
local currentPitch = 0  -- Direct accumulation when no gyro
local currentYaw = 0

-- Touch tracking
local lookActive = false
local lastLookPosition = nil

-- Character references
local character
local humanoid
local rootPart
local head

-- First-person body hiding
local function setupFirstPerson(char)
    for _, part in pairs(char:GetDescendants()) do
        if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
            part.LocalTransparencyModifier = 1
        end
    end
end

local function onDescendantAdded(desc)
    if desc:IsA("BasePart") and desc.Name ~= "HumanoidRootPart" then
        desc.LocalTransparencyModifier = 1
    end
end

-- Setup character
local function setupCharacter(newChar)
    character = newChar
    humanoid = newChar:WaitForChild("Humanoid")
    rootPart = newChar:WaitForChild("HumanoidRootPart")
    head = newChar:WaitForChild("Head")
    
    humanoid.AutoRotate = false
    
    setupFirstPerson(newChar)
    newChar.DescendantAdded:Connect(onDescendantAdded)
    
    -- Reset rotation variables
    offsetPitch = 0
    offsetYaw = 0
    
    if not useGyro then
        local _, yaw = rootPart.CFrame:ToOrientation()
        currentYaw = yaw
        currentPitch = 0
    end
end

-- Initial character / respawn
if player.Character then
    setupCharacter(player.Character)
end
player.CharacterAdded:Connect(setupCharacter)

-- Touch controls (active in both modes)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.UserInputType == Enum.UserInputType.Touch then
        local viewportSize = camera.ViewportSize
        if input.Position.X > viewportSize.X / 2 then  -- Right half = look controls
            lookActive = true
            lastLookPosition = input.Position
        end
    end
end)

UserInputService.InputChanged:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.UserInputType == Enum.UserInputType.Touch and lookActive and lastLookPosition then
        local delta = input.Position - lastLookPosition
        
        local deltaYaw = -delta.X * TOUCH_SENSITIVITY    -- Swipe right → turn right (horizontal feels natural)
        local deltaPitch = (invertTouchPitch and -delta.Y or delta.Y) * TOUCH_SENSITIVITY  -- Vertical: with invertTouchPitch = true → swipe up = look up
        
        if useGyro then
            -- Add to offset (adjusts the "center" of gyro aiming)
            offsetYaw += deltaYaw
            offsetPitch += deltaPitch
        else
            -- Direct relative turning (fallback when no gyro)
            currentYaw += deltaYaw
            currentPitch += deltaPitch
        end
        
        lastLookPosition = input.Position
    end
end)

UserInputService.InputEnded:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.UserInputType == Enum.UserInputType.Touch then
        lookActive = false
        lastLookPosition = nil
    end
end)

-- Main update
RunService.RenderStepped:Connect(function()
    if not (head and rootPart) then return end
    
    local camPos = head.Position
    local finalPitch, finalYaw
    
    if useGyro then
        local _, deviceCF = UserInputService:GetDeviceRotation()
        if not deviceCF then return end
        
        local rawLook = invertLook and -deviceCF.LookVector or deviceCF.LookVector
        
        local horizLook = Vector3.new(rawLook.X, 0, rawLook.Z)
        local horizMag = horizLook.Magnitude
        if horizMag < 0.01 then horizMag = 0.01 end
        
        local basePitch = math.atan2(rawLook.Y, horizMag)
        if invertPitch then basePitch = -basePitch end
        
        local baseYaw = math.atan2(rawLook.X, rawLook.Z)
        if invertYaw then baseYaw = -baseYaw end
        
        finalPitch = basePitch + offsetPitch
        finalYaw = baseYaw + offsetYaw
    else
        finalPitch = currentPitch
        finalYaw = currentYaw
    end
    
    -- Clamp pitch in both modes
    finalPitch = math.clamp(finalPitch, -maxPitch, maxPitch)
    
    local camCF = CFrame.fromOrientation(finalPitch, finalYaw, 0)
    
    camera.CFrame = CFrame.new(camPos) * camCF
    rootPart.CFrame = CFrame.new(rootPart.Position) * CFrame.Angles(0, finalYaw, 0)
end)

Features & Information

Me: yo bro make me a script Grok: I got you bro Me: why it not working on pc Grok: only work on mobile bro are you dumb Add touch screen or just call it A screen touch ok i am dumb it call touch screen but can turn around
#Idk#hack#hacks#Dante#Dante but cooler

Community Comments (5)

NPCNOkNPCNOkJan 19, 2026

don't care the inverted because i tell Ai fix the * inverted the ai dumb* doing it wrong so i change the invertedYaw set to true because it will can turn left and right

NPCNOkNPCNOkJan 19, 2026(edited)

Delta executor ruin my save script everything. because my script was delete and gone, some script are working but delta think the script was delete they never executed the script in my save script

pakuptpakuptJan 19, 2026

Work - like script

Replying to @pakupt
NPCNOkNPCNOkJan 20, 2026

@pakupt thank

NPCNOkNPCNOkJan 20, 2026

@DEVKIX thanks

More Scripts for Universal Scripts