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