Run it
Copy the script and paste it into your executor.
players = :()
runService = :()
userInputService = :()
localPlayer = players.LocalPlayer
character = localPlayer.Character localPlayer.CharacterAdded:()
root = character:()
humanoid = character:()
camera = .CurrentCamera
iconOff =
iconOn =
cursorImg =
isTouchDevice = userInputService.TouchEnabled
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.ZIndexBehavior = .ZIndexBehavior.Sibling
screenGui.IgnoreGuiInset =
screenGui.Parent = localPlayer:()
customIconId =
customCursorId =
customIconId ~=
iconOff = customIconId
iconOn = customIconId
customCursorId ~=
cursorImg = customCursorId
buttonPosition = .(, , , )
buttonSize = .(, , , )
button = .()
button.Name =
button.Size = buttonSize
button.Position = buttonPosition
button.AnchorPoint = .(, )
button.Image = iconOff
button.BackgroundTransparency =
button.BorderSizePixel =
button.ImageRectSize = .(, )
button.Visible = isTouchDevice
button.Parent = screenGui
cursorSize = .(, , , )
cursor = .()
cursor.Name =
cursor.AnchorPoint = .(, )
cursor.Position = .(, , , )
cursor.Size = cursorSize
cursor.BackgroundTransparency =
cursor.BorderSizePixel =
cursor.ScaleType = .ScaleType.Fit
cursor.Image = cursorImg
cursor.Visible =
cursor.Parent = screenGui
shiftLockActive =
renderConnection
shoulderOffset = .(, , )
maxLength =
(state)
button.Image = state iconOn iconOff
()
.(
root.Position,
.(
root.Position.X + camera.CFrame.LookVector.X * maxLength,
root.Position.Y,
root.Position.Z + camera.CFrame.LookVector.Z * maxLength
)
)
()
humanoid.AutoRotate =
()
userInputService.MouseBehavior = .MouseBehavior.LockCenter
userInputService.MouseIconEnabled =
cursor.Visible =
renderConnection = runService.RenderStepped:(()
root.CFrame = ()
camera.CFrame = camera.CFrame * shoulderOffset
camera.Focus = .(
camera.Focus.Position,
camera.CFrame.RightVector,
camera.CFrame.UpVector
) * shoulderOffset
)
()
humanoid.AutoRotate =
()
userInputService.MouseBehavior = .MouseBehavior.Default
userInputService.MouseIconEnabled =
cursor.Visible =
renderConnection
renderConnection:()
renderConnection =
()
shiftLockActive = shiftLockActive
shiftLockActive
()
()
button.MouseButton1Click:(toggleShiftLock)
localPlayer.CharacterAdded:((newCharacter)
character = newCharacter
root = newCharacter:()
humanoid = newCharacter:()
renderConnection
renderConnection:()
renderConnection =
shiftLockActive =
()
cursor.Visible =
userInputService.MouseBehavior = .MouseBehavior.Default
userInputService.MouseIconEnabled =
)
players.PlayerRemoving:((leavingPlayer)
leavingPlayer == localPlayer shiftLockActive
()
)🔒Shift Lock For Mobile📱 (Remade Definitive) (Modern design based on Roblox's own control design, colors, etc.)🎯 📜Shift Lock for Mobile, remade and updated. Works in Roblox Studio, Studio Lite, and any future versions that come out. Just create a simple LocalScript in Roblox Studio, inside StarterPlayerScripts. And yeah, it obviously works with executors too.

Universal