UserInputService
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
UserInputService é um serviço usado para detectar e capturar os diferentes tipos de entrada disponíveis no dispositivo de um usuário.
O propósito principal deste serviço é permitir que as experiências cooperem com várias formas de entrada disponíveis, como gamepads, telas de toque e teclados.Permite que um LocalScript execute diferentes ações dependendo do dispositivo e, por sua vez, forneça a melhor experiência para o usuário final.
Alguns usos deste serviço incluem detectar a entrada do usuário quando eles interagem com GUIs, ferramentas e outras instâncias de jogo.Para detectar a entrada do usuário, o serviço deve procurar um evento de serviço.Por exemplo, o serviço pode detectar eventos como quando o usuário toca na tela de um dispositivo móvel usando UserInputService.TouchStarted , ou conecta um gamepad, como um controlador Xbox, ao seu dispositivo usando UserInputService.GamepadConnected .
Como este serviço é apenas do lado do cliente, ele só funcionará quando usado em um LocalScript ou um ModuleScript necessário por um LocalScript .Como o UserInputService é apenas do lado do cliente, os usuários no jogo só podem detectar sua própria entrada - e não a entrada de outros.
Veja também ContextActionService , um serviço que permite vincular funções a várias entradas de usuário.
Resumo
Propriedades
Descreve se o dispositivo do usuário tem um acelerômetro.
Descreve se o dispositivo usado por um usuário tem um gamepad disponível.
Descreve se o dispositivo do usuário tem um giroscópio.
Descreve se o dispositivo do usuário tem um teclado disponível.
Determina se o mouse do usuário pode ser movido livremente ou está bloqueado.
Escala a saída delta (mudança) do usuário de Mouse.
Descreve se o dispositivo do usuário tem um mouse disponível.
O ID do conteúdo da imagem usada como ícone do mouse do usuário.
Determina se o ícone Mouse é visível.
Determina a posição do teclado na tela.
Determina o tamanho do teclado na tela.
Descreve se um teclado na tela está atualmente visível na tela do usuário.
Descreve se o dispositivo atual do usuário tem um touch-screen disponível.
Indica se o usuário está usando um headset de realidade virtual.
Métodos
Retorna se o gamepad dado Enum.UserInputType suporta um botão correspondente ao dado Enum.KeyCode.
Retorna um array de Enum.UserInputType gamepads atualmente conectados.
Retorna um InputObject que descreve a aceleração atual do dispositivo.
Retorna um InputObject descrevendo o vector de gravidade atual do dispositivo.
Retorna um InputObject e um CFrame, descrevendo o vetor de rotação atual do dispositivo.
Retorna o atualmente TextBox o cliente está atualmente focado.
Retorna se um gamepad com o dado Enum.UserInputType ''gamepadNum'' está conectado.
Retorna um array de InputObjects para todos os inputs disponíveis no gamepad dado, representando o último estado de entrada de cada input.
Retorna uma imagem para o solicitado Enum.KeyCode .
Retorna um array de InputObjects associado ao keys atualmente sendo pressionado para baixo.
Retorna o Enum.UserInputType associado ao mais recente input do usuário.
Retorna um array de InputObjects correspondendo aos botões do mouse que estão sendo mantidos pressionados atualmente.
Retorna a mudança, em pixels, da posição do Mouse do jogador na última imagem renderizada. Funciona apenas se o mouse estiver bloqueado.
Retorna a localização da tela atual do jogador de Mouse em relação ao canto superior esquerdo da tela.
Retorna um array de gamepads conectados e habilitados para navegação GUI em ordem decrescente de prioridade.
Retorna uma string que representa uma tecla que o usuário deve pressionar para inserir um dado Enum.KeyCode .
Retorna um array de KeyCodes que o gamepad associado ao dado Enum.UserInputType suporta.
Determina se um botão específico é pressionado em um gamepad específico.
Retorna se o dado key atualmente está pressionado.
Retorna se o dado mouse button atualmente está pressionado.
Retorna verdadeiro se o gamepad especificado Enum.UserInputType for permitido controlar a navegação GuiObjects.
Recentra o CFrame da fone de ouvido VR para a orientação atual do fone de ouvido usado pelo usuário.
Define se o especificado Gamepad pode ou não mover o navegador GuiObject.
Eventos
Dispedido quando um usuário move um dispositivo que tem um acelerômetro. Usado para rastrear o movimento de dispositivos do mundo real dentro de um jogo do Roblox.
Dispedido quando a força da gravidade muda em um dispositivo que tem um acelerômetro ativado - como um dispositivo móvel.
Dispedido quando um usuário gira um dispositivo que tem um giroscópio.
Dispara quando um gamepad é conectado ao cliente. Passa o "gamepadNum" do gamepad que foi conectado.
Dispara quando um gamepad é desconectado do cliente. Passa o Enum.UserInputType do gamepad que foi desconectado.
Dispedido quando um usuário começa a interagir através de um dispositivo de Interface Humano-Computador - como um mouse ou gamepad.
Dispedido quando um usuário muda como está interagindo através de um dispositivo de Interface Humano-Computador.
Incêndios quando um usuário para de interagir através de um dispositivo de Interface Humano-Computador.
Incêndios sempre que o cliente faz um pedido para que seu personagem pule.
Dispara quando o Enum.UserInputType do cliente é alterado.
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : boolean):RBXScriptSignal
Incêndios quando o usuário executa uma ação de ponteiro específica (roda, pinça, panela).
Dispedido quando o cliente perde o foco em um TextBox .
Dispedido quando o cliente se concentra em um TextBox.
- TouchDrag(dragDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : boolean):RBXScriptSignal
Dispedido quando um usuário solta seu dedo da tela em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Dispedido quando um usuário mantém pelo menos um dedo por um curto período de tempo na mesma posição na tela em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Dispara quando um usuário move o dedo em um dispositivo TouchEnabled , como um tablet ou smartphone.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Dispedido quando um usuário arrasta pelo menos um dedo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Disparado quando um usuário morde seus dedos em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Dispara quando um usuário gira dois dedos em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Disparado quando um usuário coloca o dedo em um dispositivo habilitado para toque - como a tela de um iPad ou iPhone da Apple ou um telefone Android do Google.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : boolean):RBXScriptSignal
Incêndios em um dispositivo TouchEnabled quando um usuário coloca seu(s) dedo(s) na tela, passa pela tela e levanta seu dedo com uma certa velocidade de movimento.
Dispedido quando um usuário toca seu dedo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Dispara quando um usuário toca o mundo do jogo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Incêndios quando a janela do cliente Roblox perde o foco na tela do usuário.
Incêndios quando a janela do cliente Roblox ganha foco na tela do usuário.
Propriedades
AccelerometerEnabled
Amostras de código
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
GamepadEnabled
GyroscopeEnabled
KeyboardEnabled
Amostras de código
local UserInputService = game:GetService("UserInputService")
if UserInputService.KeyboardEnabled then
print("The user's device has an available keyboard!")
else
print("The user's device does not have an available keyboard!")
end
MouseBehavior
Amostras de código
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
-- Redefina a câmera de volta para CFrame e FieldOfView antes do 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
end
local function ZoomCamera()
-- Permitir que a câmera seja alterada por script
camera.CameraType = Enum.CameraType.Scriptable
-- Armazenar propriedades da câmera antes do zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Aproxime a câmera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Tranclar e desacelerar o mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Redefinir ângulos de zoom
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Alternar zoom/desZoom da câmera
local function MouseClick()
if zoomed then
-- Desfocar a câmera
ResetCamera()
else
-- Ampliar na câmera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- qualquer coisa acima tornaria a busca para cima e para baixo mais difícil; recomende qualquer coisa entre 0~1
local smoothness = 0.05 -- recomendar qualquer coisa entre 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)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
MouseDeltaSensitivity
Amostras de código
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
-- Redefina a câmera de volta para CFrame e FieldOfView antes do 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
end
local function ZoomCamera()
-- Permitir que a câmera seja alterada por script
camera.CameraType = Enum.CameraType.Scriptable
-- Armazenar propriedades da câmera antes do zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Aproxime a câmera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Tranclar e desacelerar o mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Redefinir ângulos de zoom
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Alternar zoom/desZoom da câmera
local function MouseClick()
if zoomed then
-- Desfocar a câmera
ResetCamera()
else
-- Ampliar na câmera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- qualquer coisa acima tornaria a busca para cima e para baixo mais difícil; recomende qualquer coisa entre 0~1
local smoothness = 0.05 -- recomendar qualquer coisa entre 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)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
MouseEnabled
Amostras de código
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
-- Redefina a câmera de volta para CFrame e FieldOfView antes do 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
end
local function ZoomCamera()
-- Permitir que a câmera seja alterada por script
camera.CameraType = Enum.CameraType.Scriptable
-- Armazenar propriedades da câmera antes do zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Aproxime a câmera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Tranclar e desacelerar o mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Redefinir ângulos de zoom
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Alternar zoom/desZoom da câmera
local function MouseClick()
if zoomed then
-- Desfocar a câmera
ResetCamera()
else
-- Ampliar na câmera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- qualquer coisa acima tornaria a busca para cima e para baixo mais difícil; recomende qualquer coisa entre 0~1
local smoothness = 0.05 -- recomendar qualquer coisa entre 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)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
MouseIcon
Amostras de código
local UserInputService = game:GetService("UserInputService")
-- Para restaurar o cursor ao que foi definido anteriormente, ele precisará ser salvo em uma variável
local savedCursor = nil
local function setTemporaryCursor(cursor: string)
-- Apenas atualize o cursor salvo se ele não estiver atualmente salvo
if not savedCursor then
savedCursor = UserInputService.MouseIcon
end
UserInputService.MouseIcon = cursor
end
local function clearTemporaryCursor()
-- Restaure apenas o cursor do mouse se houver um cursor salvo para restaurar
if savedCursor then
UserInputService.MouseIcon = savedCursor
-- Não restaure o mesmo cursor duas vezes (pode substituir outro script)
savedCursor = nil
end
end
setTemporaryCursor("http://www.roblox.com/asset?id=163023520")
print(UserInputService.MouseIcon)
clearTemporaryCursor()
print(UserInputService.MouseIcon)
MouseIconEnabled
Amostras de código
local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)
OnScreenKeyboardPosition
OnScreenKeyboardSize
OnScreenKeyboardVisible
PreferredInput
TouchEnabled
VREnabled
Amostras de código
local VRService = game:GetService("VRService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local function TrackHead(inputType, value)
if inputType == Enum.UserCFrame.Head then
head.CFrame = value
end
end
if VRService.VREnabled then
-- Set the initial CFrame
head.CFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
-- Track VR headset movement and mirror for character's head
VRService.UserCFrameChanged:Connect(TrackHead)
end
Métodos
GamepadSupports
Parâmetros
Devolução
GetDeviceAcceleration
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
if UserInputService.AccelerometerEnabled then
local acceleration = UserInputService:GetDeviceAcceleration().Position
print(acceleration)
else
warn("Cannot get device acceleration because device does not have an enabled accelerometer!")
end
GetDeviceGravity
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
local bubble = script.Parent:WaitForChild("Bubble")
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(0, 20, 0) * CFrame.Angles(-math.pi / 2, 0, 0)
if UserInputService.GyroscopeEnabled then
-- Bind event to when gyroscope detects change
UserInputService.DeviceGravityChanged:Connect(function(accel)
-- Move the bubble in the world based on the gyroscope data
bubble.Position = Vector3.new(-8 * accel.Position.X, 1.8, -8 * accel.Position.Z)
end)
end
GetDeviceRotation
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
if UserInputService.GyroscopeEnabled then
local _, cf = UserInputService:GetDeviceRotation()
print(cf)
else
warn("Cannot get device rotation because device does not have an enabled gyroscope!")
end
GetImageForKeyCode
Parâmetros
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappedIconImage = UserInputService:GetImageForKeyCode(key)
imageLabel.Image = mappedIconImage
GetLastInputType
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
if UserInputService:GetLastInputType() == Enum.UserInputType.Keyboard then
print("Most recent input was keyboard!")
end
GetMouseButtonsPressed
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
-- Return an array of the pressed mouse buttons
local buttonsPressed = UserInputService:GetMouseButtonsPressed()
local m1, m2 = false, false
for _, button in buttonsPressed do
if button.UserInputType == Enum.UserInputType.MouseButton1 then
print("MouseButton1 pressed!")
m1 = true
end
if button.UserInputType == Enum.UserInputType.MouseButton2 then
print("MouseButton2 pressed!")
m2 = true
end
if m1 and m2 then
print("Both mouse buttons pressed!")
end
end
end)
GetMouseDelta
Devolução
Amostras de código
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
local function onRenderStep()
local delta = UserInputService:GetMouseDelta()
if delta ~= Vector2.new(0, 0) then
print("The mouse has moved", delta, "since the last step")
end
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, onRenderStep)
GetSupportedGamepadKeyCodes
Parâmetros
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Como essa função não retorna nada, esse manipulador vai
-- “larvar” a entrada e nenhum outro manipulador de ação será chamado após
-- essa aqui
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end
IsGamepadButtonDown
Parâmetros
Devolução
IsMouseButtonPressed
Parâmetros
Devolução
RecenterUserHeadCFrame
Devolução
SetNavigationGamepad
Parâmetros
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)
Eventos
DeviceAccelerationChanged
Parâmetros
Amostras de código
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local SENSITIVITY = 0.2
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local ready = true
local function changeAcceleration(acceleration)
if ready then
ready = false
local accel = acceleration.Position
if accel.Y >= SENSITIVITY then
humanoid.Jump = true
end
if accel.Z <= -SENSITIVITY then
humanoid:Move(Vector3.new(-1, 0, 0))
end
if accel.Z >= SENSITIVITY then
humanoid:Move(Vector3.new(1, 0, 0))
end
if accel.X <= -SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, 1))
end
if accel.X >= SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, -1))
end
task.wait(1)
ready = true
end
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceAccelerationChanged:Connect(changeAcceleration)
end
DeviceGravityChanged
Parâmetros
Amostras de código
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
DeviceRotationChanged
Parâmetros
Amostras de código
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
InputBegan
Parâmetros
Amostras de código
-- Para usar o evento InputBegan, o serviço UserInputService deve ser usado
local UserInputService = game:GetService("UserInputService")
-- Uma função de amostra que fornece vários casos de uso para vários tipos de entrada do usuário
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
JumpRequest
Amostras de código
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Dispara quando o usuário tenta pular
local function jump()
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
UserInputService.JumpRequest:Connect(jump)
LastInputTypeChanged
Parâmetros
Amostras de código
local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)