We use cookies on this site to enhance your user experience
Collapse Sidebar




This property describes whether the user’s device has a mouse available. This property is true when the user’s device has an available mouse, and false when it does not.

local UserInputService = game:GetService("UserInputService")

if (UserInputService.MouseEnabled) then
    print("The user's device has an available mouse!")
    print("The user's device does not have an available mouse!")

It is important to check this before using UserInputService mouse functions such as UserInputService/GetMouseLocation.

As UserInputService is client-side only, this property can only be used in a LocalScript.

See also

  • UserInputService/MouseBehavior
  • UserInputService/MouseDeltaSensitivity
  • UserInputService/MouseIconEnabled
  • UserInputService/GetMouseLocation
  • UserInputService/GetMouseDelta
  • UserInputService/GetMouseButtonsPressed

Code Samples

Create a Binoculars Script

This example creates a binoculars script that decreases the player’s Camera/FieldOfView|FieldOfView and UserInputService/MouseDeltaSensitivity|MouseDeltaSensitivity when a player with a UserInputService/MouseEnabled|MouseEnabled left mouse clicks. The script also points the player’s Camera towards the DataType/Vector3|Vector3 world position of the mouse click determined by the Mouse|Mouse’s Mouse/Hit|Mouse.Hit.p property.

When the player left mouse clicks again, the player’s camera reverts back to the a custom Enum/CameraType|CameraType with the same field of view and Camera/CFrame|CFrame as before the player zoomed in with the script.

While the player uses the binoculars, the script locks the player’s mouse to the center of the screen by setting the player’s UserInputType/MouseBehavior|MouseBehavior to LockCenter. The player’s camera moves when the player moves their mouse according to the InputObject/Delta|InputObject.Delta property passed by UserInputService/InputChanged|InputChanged indicating the mouse’s DataType/Vector2|Vector2 change in screen position.

In order for this example to work as expected, it should be placed in a LocalScript.

local UserInputService = game:GetService("UserInputService")

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)

local mouse = player:GetMouse()

local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties =
	FieldOfView = nil,
	_CFrame = nil,
	MouseBehavior = nil,
	MouseDeltaSensitivity = nil

local AngleX,TargetAngleX = 0,0
local AngleY,TargetAngleY = 0,0

-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
	target = nil
	camera.CameraType = Enum.CameraType.Custom
	camera.CFrame = originalProperties._CFrame
	camera.FieldOfView = originalProperties.FieldOfView
	UserInputService.MouseBehavior = originalProperties.MouseBehavior
	UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity

local function ZoomCamera()
	-- Allow camera to be changed by script
	camera.CameraType = Enum.CameraType.Scriptable
	-- Store camera properties before zoom
	originalProperties._CFrame = camera.CFrame
	originalProperties.FieldOfView = camera.FieldOfView
	originalProperties.MouseBehavior = UserInputService.MouseBehavior
	originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity

	-- Zoom camera
	target = mouse.Hit.p
	local eyesight = head.Position
	camera.CFrame = CFrame.new(eyesight, target)
	camera.Focus = CFrame.new(target)
	camera.FieldOfView = 10
	-- Lock and slow down mouse
	UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
	UserInputService.MouseDeltaSensitivity = 1
	-- Reset zoom angles
	AngleX,TargetAngleX = 0,0
	AngleY,TargetAngleY = 0,0

-- Toggle camera zoom/unzoom
local function MouseClick()
	if zoomed then
		-- Unzoom camera
		-- Zoom in camera
	zoomed = not zoomed

local cameraRotation = Vector2.new(0,math.rad(-60))
local function MouseMoved(input)
	if zoomed then
		local sensitivity = 0.6		-- anything higher would make looking up and down harder; recommend anything between 0~1
		local smoothness = 0.05		-- recommend anything between 0~1

		local delta = Vector2.new(input.Delta.x/sensitivity,input.Delta.y/sensitivity) * smoothness

		local X = TargetAngleX - delta.y
		local Y = TargetAngleY - delta.x
		TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
		TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
		AngleX = AngleX + (TargetAngleX - AngleX) *0.35
		AngleY = AngleY + (TargetAngleY - AngleY) *0.15
		camera.CFrame = CFrame.new(head.Position, target)
		* CFrame.Angles(0,math.rad(AngleY),0)
		* CFrame.Angles(math.rad(AngleX),0,0)

local function InputBegan(input, gameProcessedEvent)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then

local function InputChanged(input, gameProcessedEvent)
	if input.UserInputType == Enum.UserInputType.MouseMovement then

if UserInputService.MouseEnabled then