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

GamepadConnected

The GamepadConnected event fires when a gamepad is connected to the client.

Since a Roblox game supports multiple controllers, this event is useful when paired with the UserInputService/GamepadDisconnected event to track which controllers/gamepads are active. You can also use UserInputService/GetNavigationGamepads and UserInputService/GetConnectedGamepads to find the correct gamepad to use.

The following example demonstrates a usage example of a tracking when a gamepad is connected to the client.

local userInputService = game:GetService("UserInputService")

local function GamepadConnected(gamepad)
	print("Player has plugged controller: " .. tostring(gamepad))
end)

userInputService.GamepadConnected:Connect(GamepadDisconnected)

If you want to see which devices are connected, you can use the UserInputService/GetConnectedGamepads function.

As this event fires locally, it can only be used in a LocalScript.
See this page for articles on cross-platform development.

See also

  • UserInputService/GamepadDisconnected
  • UserInputService/GetConnectedGamepads
  • UserInputService/GetNavigationGamepads
  • UserInputService/SetNavigationGamepad
  • UserInputService/IsNavigationGamepad
  • UserInputService/IsGamepadButtonDown
  • UserInputService/GetSupportedGamepadKeyCodes
  • UserInputService/GetGamepadState
  • UserInputService/GetGamepadConnected
  • UserInputService/GamepadSupports
  • UserInputService/GamepadEnabled

Parameters

Name Type Default Description

The Enum/UserInputType of the connected gamepad


Code Samples


How to Use the Right Gamepad for Input

The following code sample is used in the default gamepad script, so if you are using the default controls you do not need to worry about this. If you are creating a custom script for handling gamepad controls, this is a good template for retrieving which Enum/UserInputType|gamepad enum you should use as the primary gamepad controller.

This code looks for the lowest numbered UserInputService/GetNavigationGamepad|navigation gamepad, and if no navigation gamepad is found, finds the lowest numbered UserInputService/GetConnectedGamepad|connected gamepad. If there is no connected gamepad, we default to gamepad1. This ensures at least some gamepad will be able to do controls.

local UserInputService = game:GetService("UserInputService")

local activeGamepad = nil
function GetActiveGamepad()
	local activateGamepad = nil
	local navigationGamepads = {}
	
	navigationGamepads = UserInputService:GetNavigationGamepads()
	
	if #navigationGamepads > 1 then
		for i = 1, #navigationGamepads do
			if activateGamepad == nil then
				activateGamepad = navigationGamepads[i]
			elseif navigationGamepads[i].Value < activateGamepad.Value then
				activateGamepad = navigationGamepads[i]
			end
		end
	else
		local connectedGamepads = {}
		
		connectedGamepads = UserInputService:GetConnectedGamepads()
		
		if #connectedGamepads > 0 then
			for i = 1, #connectedGamepads do
				if activateGamepad == nil then
					activateGamepad = connectedGamepads[i]
				elseif connectedGamepads[i].Value < activateGamepad.Value then
					activateGamepad = connectedGamepads[i]
				end
			end
		end
		if activateGamepad == nil then -- nothing is connected, at least set up for gamepad1
			activateGamepad = Enum.UserInputType.Gamepad1
		end
	end

	return activateGamepad
end

if UserInputService.GamepadEnabled then
	activeGamepad = GetActiveGamepad()
end