UserInputService

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável
Serviço
Não replicado

UserInputService é um serviço usado para detectar e capturar os diferentes tipos de entrada disponíveis em um dispositivo do usuário.

O propósito principal deste serviço é permitir que experiências colaborem com várias formas de entrada disponíveis, como gamepads, telas de toque e teclados. Ele permite que um LocalScript execute diferentes ações dependendo do dispositivo e, em seguida, 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 GUI, ferramentas e outras instâncias de jogos. 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 a tela de um dispositivo móvel usando Class.

Como este serviço é apenas do lado do cliente, ele só funcionará quando usado em um LocalScript ou um ModuleScript requerido por um LocalScript. Como o UserInputService é apenas do lado do cliente, os usuários do jogo só podem detectar sua própria entrada - e não a entrada de outros.

Veja também ContextActionService, um serviço que permite que você vincule funções a vários entrada de usuário.

Amostras de código

UserInputService

-- We must get the UserInputService before we can use it
local UserInputService = game:GetService("UserInputService")
-- A sample function providing one usage of InputBegan
local function onInputBegan(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed!")
end
end
UserInputService.InputBegan:Connect(onInputBegan)

Resumo

Propriedades

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se o dispositivo do usuário tem um acelerômetro.

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se o dispositivo usado por um usuário tem um controle / controle de jogodisponível.

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se o dispositivo do usuário tem um giroscópio.

  • Somente leitura
    Não replicado
    Ler Parallel

    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.

  • Não replicado
    Ler Parallel

    Escala a saída de escala (mudança) do usuário's Mouse .

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se o dispositivo do usuário tem um mouse disponível.

  • MouseIcon:ContentId
    Ler Parallel

    O ID de conteúdo da imagem usada como o ícone do mouse do usuário.

  • Determina se o ícone Mouse é visível.

  • Somente leitura
    Não replicado
    Ler Parallel

    Determina a posição do teclado na tela.

  • Somente leitura
    Não replicado
    Ler Parallel

    Determina o tamanho do teclado na tela.

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se um teclado na tela está atualmente visível na tela do usuário.

  • Somente leitura
    Não replicado
    Ler Parallel

    Descreve se o dispositivo atual do usuário tem uma tela de toque disponível.

  • Somente leitura
    Não replicado
    Ler Parallel

    Indica se o usuário está usando um óculosde realidade virtual.

Métodos

Eventos

Propriedades

AccelerometerEnabled

Somente leitura
Não replicado
Ler Parallel

Esta propriedade descreve se o dispositivo do usuário tem um acelerômetro

Um acelerômetro é um componente encontrado em maioria dos dispositivos móveis que medem aceleração (mudança de velocidade).

Por exemplo, o seguinte código de exemplo mostra como verificar se o dispositivo do usuário tem um acelerômetro.


local UserInputService = game:GetService("UserInputService")
local accelerometerEnabled = UserInputService.AccelerometerEnabled
if accelerometerEnabled then
print("Accelerometer enabled!")
else
print("Accelerometer not enabled!")
end

Se o dispositivo tiver um acelerômetro ativado, você pode obter sua aceleração atual usando a função UserInputService:GetDeviceAcceleration() ou rastrear quando a aceleração do dispositivo muda usando o evento UserInputService.DeviceAccelerationChanged.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Amostras de código

Move a Ball using the Accelerometer

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
Create a Gyroscopic Camera

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end

GamepadEnabled

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve se o dispositivo usado por um usuário tem um controle / controle de jogodisponível. Se os gamepads estiverem disponíveis, você pode usar UserInputService:GetConnectedGamepads() para recuperar uma lista de gamepads conectados.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Veja também:

Amostras de código

How to Set the Active Gamepad for Input

local UserInputService = game:GetService("UserInputService")
local function getActiveGamepad()
local activeGamepad = nil
local connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for _, gamepad in connectedGamepads do
if activeGamepad == nil or gamepad.Value < activeGamepad.Value then
activeGamepad = gamepad
end
end
end
if activeGamepad == nil then -- Nothing is connected; set up for "Gamepad1"
activeGamepad = Enum.UserInputType.Gamepad1
end
return activeGamepad
end
if UserInputService.GamepadEnabled then
local activeGamepad = getActiveGamepad()
print(activeGamepad)
end

GyroscopeEnabled

Somente leitura
Não replicado
Ler Parallel

Esta propriedade descreve se o dispositivo do usuário tem um giroscópio.

Um giroscópio é um componente encontrado em maioria dos dispositivos móveis que detecta orientação e velocidade de rotação.

Se o dispositivo de um usuário tiver um giroscópio, você pode usá-lo em seu jogo usando a função UserInputService:GetDeviceRotation() e o evento UserInputService.DeviceRotationChanged.


local UserInputService = game:GetService("UserInputService")
local gyroIsEnabled = UserInputService.GyroscopeEnabled
if gyroIsEnabled then
print("Gyroscope is enabled!")
else
print("Gyroscope is not enabled!")
end

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Amostras de código

Create a Gyroscopic Camera

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end

KeyboardEnabled

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve se o dispositivo do usuário tem um teclado disponível. Essa propriedade é true quando o dispositivo do usuário tem um teclado disponível e false quando não.

Pode ser usado para determinar se o usuário possui um teclado disponível - o que pode ser importante se você quiser verificar se você pode usar UserInputService:IsKeyDown() ou UserInputService:GetKeysPressed() para verificar a entrada do teclado.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Amostras de código

Check if Keyboard is Enabled

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

Ler Parallel

Esta propriedade define como o mouse do usuário se comporta com base no Enum.MouseBehavior Enum. O valor padrão é Enum.MouseBehavior.Default.

Pode ser definido para três valores:

  1. Padrão : O mouse se move livremente ao redor da tela do usuário.
  2. LockCenter : O mouse está bloqueado e não pode ser movido do centro da tela do usuário.
  3. LockCurrentPosition : O mouse está bloqueado e não pode ser movido, está na posição atual na tela do usuário no momento do bloqueio.

O valor desta propriedade não afeta a sensibilidade do rastreamento de eventos ao seguir o movimento do mouse. Por exemplo, GetMouseDelta retorna a mesma posição de Vector2 na tela, independentemente de o mouse estar bloqueado ou possível de se mover livremente ao redor da tela do usuário. Como resultado, scripts padrão, como os que controlam a

Essa propriedade é sobrescrita se um GuiButton com Modal ativado estiver GuiButton.Visible a menos que o botão direito do mouse do jogador esteja desligado.

Nota que, se o mouse estiver bloqueado, UserInputService.InputChanged ainda será executado quando o jogador mover o mouse e entrará no Delta que o mouse tentou mover. Além disso, se o jogador for expulso do jogo, o mouse será forçosamente desbloqueado.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Amostras de código

Create a Binoculars Script

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
end
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.Position
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
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
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)
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
Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

MouseDeltaSensitivity

Não replicado
Ler Parallel

Essa propriedade determina a sensibilidade do usuário's Mouse .

A sensibilidade determina a extensão em que um movimento do mouse físico se traduz em um movimento do mouse no jogo. Isso pode ser usado para ajustar quão sensíveis os eventos de rastreamento de mouse, como GetMouseDelta , são para o movimento do mouse.

Esta propriedade não afeta o movimento do ícone do mouse. Nor does it affect the Sensitivity da Câmera setting found in the Settings tab of the client's Settings menu, which also adjusts the sensitivity of events tracking mouse movement.

Esta propriedade tem um valor máximo de 10 e um valor mínimo de 0. Um valor mais baixo corresponde a sensibilidade mais baixa e um valor mais alto para maior sensibilidade.

Quando a sensibilidade é 0, eventos que rastreiam o movimento do mouse ainda serão disparados, mas todos os parâmetros e propriedades indicando a mudança de posição do mouse retornarão Vector2.new() , ou Vector3.new() no caso de Class

Amostras de código

Create a Binoculars Script

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
end
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.Position
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
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
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)
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

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve se o dispositivo do usuário tem um mouse disponível. Essa propriedade é true quando o dispositivo do usuário tem um mouse disponível e false quando não.


local UserInputService = game:GetService("UserInputService")
if UserInputService.MouseEnabled then
print("The user's device has an available mouse!")
else
print("The user's device does not have an available mouse!")
end

É importante verificar isso antes de usar o mouse UserInputService funções, como UserInputService:GetMouseLocation() .

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Veja também:

Amostras de código

Create a Binoculars Script

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
end
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.Position
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
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
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)
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

ContentId
Ler Parallel

A propriedade MouseIcon determina a imagem usada como ponte. Se vazio, uma seta padrão é usada. Enquanto o cursor pair sobre alguns objetos da interface, como um ImageButton , TextButton , 1> Class.Loaded1> ou 4> Class.ProximityPrompt4>, esta imagem ser

Para ocultar o cursor inteiro, não use uma imagem transparente. Em vez disso, configure Class.UserInputService.MouseIconEnabled para false.

Amostras de código

UserInputService.MouseIcon

local UserInputService = game:GetService("UserInputService")
-- In order to restore the cursor to what it was set to previously, it will need to be saved to a variable
local savedCursor = nil
local function setTemporaryCursor(cursor: string)
-- Only update the saved cursor if it's not currently saved
if not savedCursor then
savedCursor = UserInputService.MouseIcon
end
UserInputService.MouseIcon = cursor
end
local function clearTemporaryCursor()
-- Only restore the mouse cursor if there's a saved cursor to restore
if savedCursor then
UserInputService.MouseIcon = savedCursor
-- Don't restore the same cursor twice (might overwrite another script)
savedCursor = nil
end
end
setTemporaryCursor("http://www.roblox.com/asset?id=163023520")
print(UserInputService.MouseIcon)
clearTemporaryCursor()
print(UserInputService.MouseIcon)

MouseIconEnabled

Ler Parallel

Essa propriedade determina se o ícone Mouse é visível quando true o ícone do mouse é visível, quando false ele não é.

Por exemplo, o código abaixo oculta o ícone do mouse.


local UserInputService = game:GetService("UserInputService")
UserInputService.MouseIconEnabled = false

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Amostras de código

Hide Mouse During Keyboard Input

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

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve a posição do teclado na tela em píxeis. A posição do teclado é Vector2.new(0, 0) quando não é visível.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript ou um Script com 1> Class.BaseScript.RunContext|RunContext1> definido para 4> Enumerate.RunContext.Client4>.

Veja também OnScreenKeyboardVisible e OnScreenKeyboardSize .

Amostras de código

UserInputService.OnScreenKeyboardPosition

local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)

OnScreenKeyboardSize

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve o tamanho do teclado na tela em pixels. O tamanho do teclado é Vector2.new(0, 0) quando não é visível.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript ou um Script com 1> Class.BaseScript.RunContext|RunContext1> definido para 4> Enumerate.RunContext.Client4>.

Veja também OnScreenKeyboardVisible e OnScreenKeyboardPosition .

OnScreenKeyboardVisible

Somente leitura
Não replicado
Ler Parallel

Esta propriedade descreve se um teclado no ecrã está atualmente visível no ecrã do usuário.

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript ou um Script com 1> Class.BaseScript.RunContext|RunContext1> definido para 4> Enumerate.RunContext.Client4>.

Veja também OnScreenKeyboardSize e OnScreenKeyboardPosition.

TouchEnabled

Somente leitura
Não replicado
Ler Parallel

Esta propriedade descreve se o dispositivo atual do usuário tem uma tela de toque disponível.

A propriedade é usada para determinar se o dispositivo do usuário tem uma tela de toque, e, portanto, se os eventos de toque serão Iniciar / executar. Se TouchEnabled estiver verdadeiro, você pode usar eventos do serviço de entrada do usuário, como UserInputService.TouchStarted e UserInputService.TouchEnded para rastrear quando um usuário começa e termina de tocar na tela de seu dispositivo.

O trecho de código abaixo imprime se o dispositivo do usuário tem uma tela de toque.


local UserInputService = game:GetService("UserInputService")
if UserInputService.TouchEnabled then
print("The user's device has a touchscreen!")
else
print("The user's device does not have a touchscreen!")
end

Veja também:

Amostras de código

Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

VREnabled

Somente leitura
Não replicado
Ler Parallel

Essa propriedade descreve se o usuário está usando um dispositivo de realidade virtual (VR).

Se um dispositivo VR estiver habilitado, você pode interagir com sua localização e movimento através de funções, como UserInputService:GetUserCFrame(). Você também pode reagir ao movimento do dispositivo VR usando o evento UserInputService.UserCFrameChanged.


local UserInputService = game:GetService("UserInputService")
local isUsingVR = UserInputService.VREnabled
if isUsingVR then
print("User is using a VR headset!")
else
print("User is not using a VR headset!")
end

Como UserInputService é apenas do lado do cliente, esta propriedade só pode ser usada em um LocalScript .

Veja também:

Amostras de código

VR Head Tracking

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

Essa função retorna se o gamepad dado Enum.UserInputType suporta um botão correspondente ao dado Enum.KeyCode . Essa função é usada para determinar a entrada válida do gamepad.

Para determinar quais Enum.UserInputType gamepads estão conectados, use UserInputService:GetConnectedGamepads() .

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogo.

gamepadKeyCode: Enum.KeyCode

O Enum.KeyCode do botão em questão.


Devolução

Se o gamepad dado suporta um botão correspondente ao dado Enum.KeyCode.

Amostras de código

Binding Functions to Gamepad Controls

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local controller = Enum.UserInputType.Gamepad1
local buttonX = Enum.KeyCode.ButtonX
local function isSupported(gamepad, keycode)
return UserInputService:GamepadSupports(gamepad, keycode)
end
local function action()
print("Action")
end
if isSupported(controller, buttonX) then
ContextActionService:BindAction("sample action", action, false, buttonX)
end

GetConnectedGamepads

Essa função retorna um array de Enum.UserInputType gamepads atualmente conectados. Se nenhum gamepad estiver conectado, esse array estará vazio. Além disso, ele só retorna objetos de tipo de entrada que são gamepads. Por instância, esse evento retornará um objeto de tipo de entrada conectado, mas não um Objetode teclado.

Por exemplo, o seguinte código de exemplo recupera os gamepads conectados e os armazena em uma variável chamada connectedGamepads .


local UserInputService = game:GetService("UserInputService")
local connectedGamepads = UserInputService:GetConnectedGamepads()

Para verificar se um gamepad específico está conectado, use UserInputService:GetGamepadConnected() .

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:


Devolução

Um array de UserInputTypes correspondendo aos gamepads conectados ao dispositivo do usuário.

Amostras de código

How to Set the Active Gamepad for Input

local UserInputService = game:GetService("UserInputService")
local function getActiveGamepad()
local activeGamepad = nil
local connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for _, gamepad in connectedGamepads do
if activeGamepad == nil or gamepad.Value < activeGamepad.Value then
activeGamepad = gamepad
end
end
end
if activeGamepad == nil then -- Nothing is connected; set up for "Gamepad1"
activeGamepad = Enum.UserInputType.Gamepad1
end
return activeGamepad
end
if UserInputService.GamepadEnabled then
local activeGamepad = getActiveGamepad()
print(activeGamepad)
end

GetDeviceAcceleration

A função GetDeviceAcceleration determina a aceleração atual do dispositivo do usuário. Retorna um InputObject que descreve a aceleração atual do dispositivo.

Para que isso funcione, o dispositivo do usuário deve ter um acelerômetro ativado. Para verificar se um dispositivo de usuário tem um acelerômetro ativado, você pode verificar a propriedade UserInputService.AccelerometerEnabled.

Se você quiser rastrear quando a aceleração do dispositivo do usuário muda em vez disso, você pode usar o evento UserInputService.DeviceAccelerationChanged.

Como ele só é executado localmente, ele só pode ser usado em um LocalScript .


Devolução

Amostras de código

Print Device Acceleration

local UserInputService = game:GetService("UserInputService")
local accelerometerEnabled = UserInputService.AccelerometerEnabled
if accelerometerEnabled then
local acceleration = UserInputService:GetDeviceAcceleration().Position
print(acceleration)
else
print("Cannot get device acceleration because device does not have an enabled accelerometer!")
end

GetDeviceGravity

Essa função retorna um InputObject descrevendo o vetor de gravidade atual do dispositivo.

O vetor de gravidade é determinado pela orientação do dispositivo em relação à força de gravidade real do mundo real. Por instância, se um dispositivo estiver perfeitamente ereto (retrato), o vetor de gravidade será Vector3.new(0, 0, -9.18) . Se a parte de trás do dispositivo est

Essa função pode ser usada para habilitar o dispositivo do usuário para impactar ou controlar a gravidade no jogo ou mover objetos dentro do jogo, como uma bola.

A gravidade só é rastreada para jogadores que usam um dispositivo com um gyroscope habilitado - como um dispositivo móvel.

Para verificar se o dispositivo de um usuário tem um giroscópio habilitado, verifique o valor de UserInputService.GyroscopeEnabled. Se o giroscópio estiver habilitado, você também pode usar o evento UserInputService.DeviceGravityChanged para rastrear quando a força de gravidade no dispositivo do usuário muda.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

Amostras de código

Moving Objects with the Gyroscope

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

Essa função retorna um InputObject e um CFrame que descreve o vetor de rotação atual do dispositivo.

Isso é disparado com um objeto de entrada. A propriedade Posição do objeto de entrada é um Enum.InputType.Gyroscope que rastreia a rotação total em cada eixo local.

A rotação do dispositivo só pode ser rastreada em dispositivos com um gyroscope.

Como essa função é executada localmente, ela só pode ser usada em um LocalScript .


Devolução

Um tutorial que contém duas propriedades:

  1. A propriedade delta descreve a quantidade de rotação que aconteceu pela última vez
  2. O CFrame é a rotação atual do dispositivo em relação à sua referência padrão.

Amostras de código

Print Device Rotation

local UserInputService = game:GetService("UserInputService")
local gyroEnabled = UserInputService:GyroscopeEnabled()
if gyroEnabled then
local _inputObj, cframe = UserInputService:GetDeviceRotation()
print("CFrame: {", cframe, "}")
else
print("Cannot get device rotation because device does not have an enabled gyroscope!")
end

GetFocusedTextBox

Essa função retorna o TextBox que o cliente está focado no momento. Um TextBox pode ser selecionado manualmente pelo usuário ou a seleção pode ser forçada usando a função TextBox:CaptureFocus(). Se nenhum TextBox for selecionado, essa função retornará nil.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:


Devolução

Amostras de código

Ignore User Input When a TextBox Is Focused

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")
local jumpKey = Enum.KeyCode.J
local isJumping = false
local function InputBegan(input, _gameProcessedEvent)
local TextBoxFocused = UserInputService:GetFocusedTextBox()
-- Ignore input event if player is focusing on a TextBox
if TextBoxFocused then
return
end
-- Make player jump when user presses jumpKey Key on Keyboard
if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == jumpKey then
if not isJumping then
isJumping = true
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end
local function StateChanged(_oldState, newState)
-- Prevent player from jumping again using jumpKey if already jumping
if newState == Enum.HumanoidStateType.Jumping then
isJumping = true
-- Allow player to jump again after landing
elseif newState == Enum.HumanoidStateType.Landed then
isJumping = false
end
end
UserInputService.InputBegan:Connect(InputBegan)
humanoid.StateChanged:Connect(StateChanged)

GetGamepadConnected

Essa função retorna se um gamepad com o Enum.UserInputType dado está conectado ao cliente.

Isso pode ser usado para verificar se um controle / controle de jogoespecífico, como 'Gamepad1' está conectado ao dispositivo do cliente.

Para obter uma lista de todos os gamepads conectados, use UserInputService:GetConnectedGamepads() .

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do gamepad em questão.


Devolução

Se um gamepad associado com Enum.UserInputType está conectado.

Amostras de código

Check Whether a Gamepad is Connected

local UserInputService = game:GetService("UserInputService")
local isConnected = UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad1)
if isConnected then
print("Gamepad1 is connected to the client")
else
print("Gamepad1 is not connected to the client")
end

GetGamepadState

Essa função retorna um array de InputObjects para todos os输入 disponíveis no controle / controle de jogodado, representando o último estado de entrada de cada entrada.

Para encontrar o UserInputTypes dos gamepads conectados, use UserInputService:GetConnectedGamepads() .

Como essa função só é executada localmente, ela só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType correspondente com o gamepad em questão.


Devolução

Um array de InputObjects representando o estado atual de todos os controles disponíveis para o controle / controle de jogodado.

GetImageForKeyCode

ContentId

Este método leva o Enum.KeyCode solicitado e retorna a imagem associada para o dispositivo de gamepad atualmente conectado (limitado a Xbox, PlayStation e Windows). Isso significa que se o controlador conectado for um ControleXbox, o usuário verá os recursos do Xbox. Da mesma forma, se o dispositivo conectado for um controlador PlayStation, o usuário verá os recurs

Parâmetros

keyCode: Enum.KeyCode

O Enum.KeyCode para qual se deve obter a imagem associada.


Devolução

ContentId

O ID de ativo de imagem retornado.

Amostras de código

UserInputService - Get Image For KeyCode

local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappedIconImage = UserInputService:GetImageForKeyCode(key)
imageLabel.Image = mappedIconImage

GetKeysPressed

Essa função retorna um array de InputObjects associado aos botões pressionados atualmente.

Este array pode ser itéré através para determinar quais teclas estão sendo pressionadas atualmente, usando os valores InputObject.KeyCode.

Para verificar se uma chave específica está sendo pressionada, use UserInputService:IsKeyDown() .

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

Um array de InputObjects associado com as teclas atualmente pressionadas.

Amostras de código

Double Jump Key Combo

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")
local actionKey = Enum.KeyCode.LeftShift
local canJump = true
local canDoubleJump = false
local function jumpRequest()
local keysPressed = UserInputService:GetKeysPressed()
for _, key in ipairs(keysPressed) do
if key.KeyCode == actionKey and canJump then
canJump = false
canDoubleJump = true
end
end
end
local function stateChanged(oldState, newState)
-- Double jump during freefall if able to
if oldState == Enum.HumanoidStateType.Jumping and newState == Enum.HumanoidStateType.Freefall and canDoubleJump then
canDoubleJump = false
task.wait(0.2)
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
-- Allow player to jump again after they land
if oldState == Enum.HumanoidStateType.Freefall and newState == Enum.HumanoidStateType.Landed then
canJump = true
end
end
UserInputService.JumpRequest:Connect(jumpRequest)
humanoid.StateChanged:Connect(stateChanged)

GetLastInputType

Essa função retorna 'Enum.UserInputType' associado ao mais recente input do usuário.

Por exemplo, se o usuário tivesse pressionado a barra de espaço antes, o Enum.UserInputType retornado seria 'Teclado'.

O evento UserInputService.LastInputTypeChanged pode ser usado para rastrear quando o último Enum.UserInputType usado pelo usuário muda.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

O Enum.UserInputType associado com a mais recente entrada do usuário.

Amostras de código

UserInputService:GetLastInputType

local UserInputService = game:GetService("UserInputService")
local lastInput = UserInputService:GetLastInputType()
if lastInput == Enum.UserInputType.Keyboard then
print("Most recent input was via keyboard")
end

GetMouseButtonsPressed

Essa função retorna um array de InputObjects correspondendo aos botões do mouse atualmente pressionados.

Botões de mouse que são rastreados por esta função incluem:


<tr>
<td>Botão de Mouse1</td>
<td>O botão esquerdo do mouse.</td>
</tr>
<tr>
<td>Botão de Mouse2</td>
<td>O botão direito do mouse.</td>
</tr>
<tr>
<td>Botão de Mouse3</td>
<td>O botão do mouse central.</td>
</tr>
NomeDescrição

Se o usuário não estiver pressionando nenhum botão de mouse quando a função for chamada, ele retornará um matriz / listavazio.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

Um array de InputObjects correspondendo aos botões do mouse atualmente pressionados.

Amostras de código

Check which MouseButtons are Pressed

local UserInputService = game:GetService("UserInputService")
-- InputBegan is a UserInputService event that fires when the player
-- begins interacting via a Human-User input device
UserInputService.InputBegan:Connect(function(_input, _gameProcessedEvent)
-- Returns an array of the pressed MouseButtons
local buttons = UserInputService:GetMouseButtonsPressed()
local m1Pressed, m2Pressed = false, false
for _, button in pairs(buttons) do
if button.UserInputType.Name == "MouseButton1" then
print("MouseButton1 is pressed")
m1Pressed = true
end
if button.UserInputType.Name == "MouseButton2" then
print("MouseButton2 is pressed")
m2Pressed = true
end
if m1Pressed and m2Pressed then
print("Both mouse buttons are pressed")
end
end
end)

GetMouseDelta

Essa função retorna a alteração, em pixels, da posição do jogador's Mouse na última janela de renderização como um Vector2 . Essa função só funciona se o mouse estiver bloqueado usando a propriedade UserInputService.MouseBehavior. Se o mouse não estiver bloqueado, os valores retornados serão zero

A sensibilidade do mouse, determinada nas configurações do cliente e UserInputService.MouseDeltaSensitivity, irá influenciar o resultado.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

Altere o movimento do mouse.

Amostras de código

Getting Mouse Delta

local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local function OnRenderStep()
local delta = UserInputService:GetMouseDelta()
print("The mouse has moved", delta, "since the last step.")
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, OnRenderStep)
Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

GetMouseLocation

Essa função retorna um Vector2 representando a localização da tela atual do jogador's Mouse em píxeles relativo ao canto superior esquerdo. Isso não conta para o inserto de GUI .

Se o local do ponteiro do mouse estiver fora da tela ou o dispositivo do jogador não tiver um mouse, o valor retornado será inválido.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

Um Vector2 representando a localização atual da tela do mouse, em pixels.

Amostras de código

Move GUI To Mouse Location

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local gui = script.Parent
local screenGui = gui.Parent
screenGui.IgnoreGuiInset = true
local function moveGuiToMouse()
local mouseLocation = UserInputService:GetMouseLocation()
gui.Position = UDim2.fromOffset(mouseLocation.X, mouseLocation.Y)
end
moveGuiToMouse()
RunService:BindToRenderStep("moveGuiToMouse", 1, moveGuiToMouse)

GetNavigationGamepads

Essa função retorna um array de gamepad UserInputTypes que estão conectados e habilitados para a navegação GUI. Essa lista está em ordem crescente de prioridade, o que significa que pode ser repetida para determinar qual gamepad deve ter controle de navegação.

Se um gamepad conectado for um gamepad de navegação, ele só determina qual controle / controle de jogo(s) controla as GUI de navegação. Isso não afeta controles de navegação.

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:


Devolução

Um array de UserInputTypes que pode ser usado para navegação GUI, na ordem crescente de prioridade.

GetStringForKeyCode

GetStringForKeyCode retorna uma string representando uma chave que o usuário deve pressionar para inserir um determinado Enum.KeyCode , lembrando-se de sua layout do teclado. Para códigos de chave que requerem algum modificador para serem pressionados, esta função retorna a chave para ser pressionada em vez do modificador. Veja os exemplos abaixo para mais explicações.

Ao usar o Roblox com um layout de teclado não QWERTY, os códigos de chave são mapeados para posições QWERTY equivalentes. Por exemplo, pressionar


local UserInputService = game:GetService("UserInputService")
local textLabel = script.Parent
local mapKey = Enum.KeyCode.M
textLabel.Text = "Press " .. UserInputService:GetStringForKeyCode(mapKey) .. " to open the map"

Exemplos no Teclado QWERTY


<tbody>
<tr>
<td><code>Enum.KeyCode.Q</code></td>
<td><code>Q</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.W</code></td>
<td><code>W</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.At</code></td>
<td><code>2</code> porque <code>@</code> é escrito com <kbd>Shift</kbd><kbd>2</kbd></td>
</tr>
</tbody>
Código da chaveRetornar Valor

Exemplos no Teclado AZERTY


<tbody>
<tr>
<td><code>Enum.KeyCode.Q</code></td>
<td><code>Uma</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.W</code></td>
<td><code>Z</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.At</code></td>
<td><code>É</code></td>
</tr>
</tbody>
Código da chaveRetornar Valor

Uso do Gamepad

GetStringForKeyCode() retorna a conversão de string para o Enum.KeyCode para a controle / controle de jogomais recentemente conectada. Se o controlador não for suportado, a função retorna a conversão de string padrão para o código de chave solicitado.

O seguinte exemplo mostra como você pode mapar recursos personalizados para ButtonA :


local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappings = {
ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA asset
ButtonCross = "rbxasset://BUTTON_CROSS_ASSET" -- Replace with the desired ButtonCross asset
}
local mappedKey = UserInputService:GetStringForKeyCode(key)
local image = mappings[mappedKey]
imageLabel.Image = image

Maps do Gamepad

Os códigos da tecla do direcional não têm nenhuma diferença com base no dispositivo. Enum.KeyCode.ButtonSelect tem comportamento ligeiramente diferente em alguns casos. Use ambos os códigos de mapeamento do PlayStation para garantir que os usuários vejam os botões corretos.


<tbody>
<tr>
<td><code>Enum.KeyCode.ButtonA</code></td>
<td><code>BotãoCross</code></td>
<td><code>BotãoA</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td><code>Círculo de Botão</code></td>
<td><code>BotãoB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonX</code></td>
<td><code>Quadrado de Botão</code></td>
<td><code>BotãoX</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonY</code></td>
<td><code>Triângulo de Botão</code></td>
<td><code>BotãoY</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL1</code></td>
<td><code>BotãoL1</code></td>
<td><code>BotãoLB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL2</code></td>
<td><code>BotãoL2</code></td>
<td><code>BotãoLT</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL3</code></td>
<td><code>BotãoL3</code></td>
<td><code>Botão LS</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR1</code></td>
<td><code>BotãoR1</code></td>
<td><code>Botão RB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR2</code></td>
<td><code>BotãoR2</code></td>
<td><code>BotãoRT</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR3</code></td>
<td><code>BotãoR3</code></td>
<td><code>Botão RS</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonStart</code></td>
<td><code>Opções de Botão</code></td>
<td><code>Início de Botão</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonSelect</code></td>
<td><code>ButtonTouchpad</code> e <code>ButtonShare</code></td>
<td><code>BotãoSelecionar</code></td>
</tr>
</tbody>
Código da chaveValor de retorno da PlayStationValor de Retorno do Xbox

Imagens do Sistema para Códigos-Chave

Ao usar um Enum.KeyCode que pode ser melhor representado como uma imagem, como para um ImageLabel em uma interface do usuário, você pode usar os seguintes ícones de legado. No entanto, recomenda-se que você use Class.UserInputService:GetImageForKeyCode()|GetImageForKeyCode() como um método mais moderno, cross-platform para recuperar


<tbody>
<tr>
<td><code>Enum.KeyCode.ButtonX</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxX.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxX.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonY</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxY.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxY.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonA</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxA.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxA.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxB.png</code></td>
</tr>
<tr>
<td><code>PadLeft do Código de Chave</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadLeft.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadLeft.png</code></td>
</tr>
<tr>
<td><code>PadRight do Código de Chave</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadRight.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadRight.png</code></td>
</tr>
<tr>
<td><code>Pad de Código de Padrão</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadUp.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadUp.png</code></td>
</tr>
<tr>
<td><code>Padrão de Chave de Lista de Classes</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadDown.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadDown.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonSelect</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxView.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxView.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonStart</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxmenu.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxmenu.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLB.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRB.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLT.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRT.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLS.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRS.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Thumbstick1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLSDirectional.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Thumbstick2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRSDirectional.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Backspace.</code></td>
<td>
<img src="../../../assets/scripting/controls/backspace.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/backspace.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Return</code></td>
<td>
<img src="../../../assets/scripting/controls/return.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/return.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.LeftShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/shift.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.RightShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/shift.png</code></td>
</tr>
<tr>
<td><code>Ctrl.KeyCode.Tab</code></td>
<td>
<img src="../../../assets/scripting/controls/tab.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/tab.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Apostrophe</code></td>
<td>
<img src="../../../assets/scripting/controls/apostrophe.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/apostrophe.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Comma</code></td>
<td>
<img src="../../../assets/scripting/controls/comma.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/comma.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Backquote</code></td>
<td>
<img src="../../../assets/scripting/controls/graveaccent.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/graveaccent.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Period</code></td>
<td>
<img src="../../../assets/scripting/controls/period.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/price.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Space</code></td>
<td>
<img src="../../../assets/scripting/controls/spacebar.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/spacebar.png</code></td>
</tr>
</tbody>
Código da chaveImagemID do ativo

Parâmetros

keyCode: Enum.KeyCode

Devolução

GetSupportedGamepadKeyCodes

Essa função retorna um array de KeyCodes que o gamepad associado com o given Enum.UserInputType suporta.

Essa função pode ser usada para determinar quais KeyCodes são suportados e não suportados por um controle / controle de jogoconectado. Para determinar se um KeyCode específico é suportado, use UserInputService:GamepadSupports() .

Se chamado em um controle / controle de jogonão existente, ou não conectado, esta função retornará um matriz / listavazio.

Como UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogo.


Devolução

Um array de KeyCodes suportado pelo controle / controle de jogodado.

Amostras de código

Binding Supported Gamepad KeyCodes

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
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
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

Essa função verifica se um botão específico é pressionado em um determinado controle / controle de jogo. Retorna true se o gamepad tiver o botão pressionado button , caso contrário, retorna falso.

Tipos de entrada válidos

O gamepad especificado deve ser um dos seguintes valores do tipo UserInputType:


<tr>
<td>Pad de entrada de usuário.UserInputType.Gamepad1-8</td>
</tr>
Nome

Códigos de chave válidos

O botão especificado deve ser um dos seguintes valores da lista de códigos-chave:


<tr>
<td>Enum.KeyCode.ButtonX</td>
</tr>
<tr>
<td>Enum.KeyCode.BotãoY</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonA</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonB</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR1</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL1</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR2</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL2</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR3</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL3</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonStart</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonSelecionar</td>
</tr>
<tr>
<td>PadLeft.KeyCode.DPadLeft</td>
</tr>
<tr>
<td>PadRight.KeyCode.DPadRight</td>
</tr>
<tr>
<td>Pad de Código de Dados.</td>
</tr>
<tr>
<td>Padrão.KeyCode.DPadDown</td>
</tr>
Nome

Isso pode ser usado para verificar se um botão específico, como A, está sendo pressionado. Por exemplo:


local UserInputService = game:GetService("UserInputService")
local button = Enum.KeyCode.ButtonA
local gamepad = Enum.UserInputType.Gamepad1
local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogodado.

gamepadKeyCode: Enum.KeyCode

O Enum.KeyCode do botão especificado.


Devolução

Se o botão de gamepad especificado no gamepad for pressionado, é pressionado.

Amostras de código

Special Action on Gamepad Button Combo

local UserInputService = game:GetService("UserInputService")
local activeGamepad = nil
local buttonX = Enum.KeyCode.ButtonX
local function isGamepadXDown()
if activeGamepad then
return UserInputService:IsGamepadButtonDown(activeGamepad, buttonX)
end
return false
end
local function input(_input, _gameProcessedEvent)
if not isGamepadXDown() then
-- Normal event
else
-- X Button down event
end
end
local function getActiveGamepad()
local activateGamepad = nil
local navigationGamepads = {}
navigationGamepads = UserInputService:GetNavigationGamepads()
if #navigationGamepads > 1 then
for i = 1, #navigationGamepads do
if activateGamepad == nil or 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 or 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()
UserInputService.InputBegan:Connect(input)
end

IsKeyDown

Essa função retorna se o usuário está segurando a chave associada ao Enum.KeyCode dado. Retorna true se a chave especificada for pressionada ou false se não for pressionada.

Isso pode ser usado para verificar se uma chave específica, como a barra de espaço, está sendo pressionada. Por exemplo:


local UserInputService = game:GetService("UserInputService")
local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)

Para recuperar uma lista de todas as chaves pressionadas pelo usuário, use a função UserInputService:GetKeysPressed().

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

keyCode: Enum.KeyCode

O Enum.KeyCode da chave.


Devolução

Se a chave especificada está sendo pressionada.

Amostras de código

Special Action on Key Combo Press

local UserInputService = game:GetService("UserInputService")
local shiftKeyL = Enum.KeyCode.LeftShift
local shiftKeyR = Enum.KeyCode.RightShift
-- Return whether left or right shift keys are down
local function isShiftKeyDown()
return UserInputService:IsKeyDown(shiftKeyL) or UserInputService:IsKeyDown(shiftKeyR)
end
-- Handle user input began differently depending on whether a shift key is pressed
local function input(_input, _gameProcessedEvent)
if not isShiftKeyDown() then
-- Normal input
else
-- Shift input
end
end
UserInputService.InputBegan:Connect(input)

IsMouseButtonPressed

Essa função usa um botão de mouse Enum.UserInputType e retorna um bool que indica se ele está atualmente pressionado.

O botão de mouse verificado depende do valor Enum.UserInputType passado à função como argumento. Por exemplo:


local UserInputService = game:GetService("UserInputService")
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript ".

Parâmetros

mouseButton: Enum.UserInputType

O Enum.UserInputType do botão do mouse.


Devolução

Se o botão de mouse dado está atualmente pressionado.

Amostras de código

Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

IsNavigationGamepad

Essa função retorna true se a gamepad especificada Enum.UserInputType for permitida para controlar a navegação e a seleção GUIs.

Se você quiser definir um controle / controle de jogode navegação, você pode usar UserInputService:SetNavigationGamepad() . Você também pode usar UserInputService:GetNavigationGamepads() para obter uma lista de todos os gamepads de navegação.

Por exemplo, o código abaixo verifica se o gamepad1 é um controle / controle de jogode navegação:


local UserInputService = game:GetService("UserInputService")
if UserInputService:IsNavigationGamepad(UserInputType.Gamepad1) then
print("Gamepad is a navigation gamepad!")
else
print("Gamepad is not a navigation gamepad!")
end

Uma lista de todos os gamepads conectados, independentemente da navegação, pode ser recuperada usando`UserInput/GetConnectedGamepads.

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadEnum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogoespecificado.


Devolução

Se a gamepad especificada for um controle / controle de jogode navegação.

RecenterUserHeadCFrame

void

Essa função retorna o CFrame da VR headset para a orientação atual do headset usado pelo usuário. Isso significa que a orientação atual do óculosé definida como CFrame.new().

Use esta função para mover o CFrame de cabeça para o centro da área de jogo se ele parecer estar em um deslocamento estranho.

Isso se comporta idêntico à função VRService, VRService:RecenterUserHeadCFrame() .

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .


Devolução

void

Amostras de código

UserInputService:RecenterUserHeadCFrame

local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()

SetNavigationGamepad

void

A função SetRotationGamepad define se o gamepad especificado Enum.UserInputType pode mover o navegador de GUI. Um gamepad que é permitido mover o navegador de GUI é considerado um gamepad de navegação.

Se o argumento habilitado for passado como true, o Gamepad pode mover o navegador de GUI. Se o argumento for false, o Gamepad não pode mover o navegador de GUI.

Se você quiser verificar se um Gamepad especificado é um set para ser um controle / controle de jogode navegação, você pode usar a função UserInputService:IsNavigationGamepad(). Você também pode usar a função UserInputService:GetNavigationGamepads() para recuperar uma lista de todos os Gamepads de navegação.

Como o UserInputService é apenas do lado do cliente, esta função só pode ser usada em um LocalScript .

Veja também:

Parâmetros

gamepadEnum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogoespecificado.

enabled: bool

Se a gamepad especificada pode mover o navegador de GUI.


Devolução

void

Amostras de código

UserInputService:SetNavigationGamepad

local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)

Eventos

DeviceAccelerationChanged

O evento DeviceAccelerationChanged é acionado quando um usuário move um dispositivo que tem um acelerômetro.

Um acelerômetro é um componente encontrado em maioria dos dispositivos móveis que medem aceleração (mudança de velocidade).

Para determinar se o dispositivo de um usuário tem um acelerômetro ativado, see UserInputService.AccelerometerEnabled .

Este evento pode ser usado para rastrear o movimento de um dispositivo que tem um acelerômetro. Um exemplo de uso inclui mover o personagem do jogador quando um dispositivo móvel acelera.

Além disso, este evento pode ser usado junto com UserInputService:GetDeviceAcceleration() para determinar o movimento atual do dispositivo de um usuário se o dispositivo tiver um acelerômetro.

Este evento só é executado localmente - o que significa que apenas o jogador cujo dispositivo se move pode usar o evento e só funcionará em um LocalScript.

Parâmetros

acceleration: InputObject

Um InputObject, com um UserInputType de ‘Acelerômetro’ e 2>Class.InputObject.Position|Position’, que mostra a força da gravidade em cada eixo local.


Amostras de código

Control Players Using the Accelerometer

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
UserInputService.DeviceAccelerationChanged:Connect(changeAcceleration)

DeviceGravityChanged

O evento UserInputService.DeviceGravityChanged é acionado quando a gravidade do dispositivo Vector3 muda em um dispositivo que tem um acelerômetro.

O vetor de gravidade de um dispositivo representa a força da gravidade em cada um dos eixos X, Y e Z do dispositivo. Embora a gravidade nunca mude, a força que ela exerce em cada eixo muda quando o dispositivo gira e muda a orientação. O valor de força exigido em cada eixo é uma matriz de unidade, que varia de -1 a 1.

Um acelerômetro é um componente encontrado em maioria dos dispositivos móveis que medem aceleração (mudança de velocidade).

Este evento pode ser usado para determinar a direção do mundo real da força da gravidade em um dispositivo do usuário. Isso ainda pode ser usado para simular a força da gravidade em um dispositivo do usuário dentro do jogo, como em objetos no jogo (veja exemplo abaixo).

Para verificar se o dispositivo de um usuário tem um acelerômetro ativado, see UserInputService.AccelerometerEnabled . Se o dispositivo tiver um acelerômetro ativado, você pode usar a função UserInputService:GetDeviceGravity() para obter a força de gravidade atual no dispositivo do usuário.

Parâmetros

gravity: InputObject

Um InputObject, com uma propriedade InputObject.Position que mostra a força da gravidade em cada eixo local. Essa posição pode ser usada como uma direção para determinar a direção da gravidade em relação ao dispositivo.


Amostras de código

Move a Ball using the Accelerometer

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
Create a Gyroscopic Camera

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end

DeviceRotationChanged

O evento DeviceRotationChanged é acionado quando um usuário gira um dispositivo que tem um giroscópio.

Um giroscópio é um componente encontrado em maioria dos dispositivos móveis que detecta orientação e velocidade de rotação.

O evento é útil para rastrear a orientação do dispositivo e como as alterações na rotação do dispositivo do usuário. Para determinar a rotação atual do dispositivo, você pode usar a função UserInputService:GetDeviceRotation().

Para verificar se o dispositivo de um usuário tem um giroscópio habilitado e que este evento será Iniciar / executar, veja UserInputService.GyroscopeEnabled.

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Parâmetros

rotation: InputObject

Um InputObject fornecendo informações sobre a rotação do dispositivo. InputObject.Position representa o novo valor de rotação de um Vector3 e 1> Class.InputObj.Delta1> representa a mudança de rotação em um 4> Datatype.Vector34> posicional.

cframe: CFrame

Um CFrame representando a orientação atual do dispositivo.


Amostras de código

Create a Gyroscopic Camera

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
Move a Ball using the Accelerometer

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

GamepadConnected

O evento GamepadConnected é acionado quando um gamepad é conectado ao cliente.

Como um jogo Roblox suporta vários controleurs, este evento é útil quando combinado com o evento UserInputService.GamepadDisconnected para rastrear quais controleurs/gamepads estão ativos. Você também pode usar UserInputService:GetConnectedGamepads() para encontrar o gamepad correto para usar.

O seguinte exemplo mostra um exemplo de uso de um rastreador quando um gamepad é conectado ao cliente.


local UserInputService = game:GetService("UserInputService")
local function GamepadConnected(gamepad)
print("Player has plugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadConnected:Connect(GamepadConnected)

Se você quiser ver quais dispositivos estão conectados, você pode usar a função UserInputService:GetConnectedGamepads().

Como este evento é disparado localmente, ele só pode ser usado em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogoconectado.


GamepadDisconnected

O evento GamepadDisconnected é acionado quando um gamepad é desconectado.

Como um jogo Roblox suporta vários controleurs, este evento é útil quando combinado com o evento UserInputService.GamepadConnected para rastrear quais controleurs/gamepads estão ativos. Você também pode usar UserInputService:GetConnectedGamepads() para encontrar o gamepad correto para usar.

O seguinte exemplo mostra um exemplo de uso de um rastreador quando um gamepad é desconectado do cliente.


local UserInputService = game:GetService("UserInputService")
local function GamepadDisconnected(gamepad)
print("Player has unplugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(GamepadDisconnected)

Como este evento é disparado localmente, ele só pode ser usado em um LocalScript .

Veja também:

Parâmetros

gamepadNum: Enum.UserInputType

O Enum.UserInputType do controle / controle de jogodesconectado.


InputBegan

O evento InputBegan é acionado quando um usuário começa a interagir via um dispositivo de interface humano-computador (botão de mouse, toque começar, botão de teclado, etc.).

Pode ser usado para rastrear o início da interação do usuário, como quando um usuário primeiro interage com um elemento GUI, um controle / controle de jogo, etc. Não captura movimentos de roda do mouse.

Este evento pode ser usado junto com UserInputService.InputChanged e UserInputService.InputEnded para rastrear quando o usuário inserir, alterar e terminar.

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Handling InputBegan

-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
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)

InputChanged

O evento InputChanged é acionado quando um usuário muda como eles interagem através de um dispositivo de interface humano-computador (botão de mouse, toque de início, botão de teclado, etc).

Para ignorar eventos que são processados automaticamente pelo Roblox, como rolar em um ScrollingFrame , verifique se o argumento gameProcessedEvent é falso. Este evento pode ser usado junto com UserInputService.InputBegan e 1> Class.UserInputService.INPUTEnded1> para rastrear quando o usuário inserir, alterar

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Handling InputChanged

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)

InputEnded

O evento Terminado de entrada é acionado quando um usuário para de interagir via um dispositivo de interface humano-computador (botão de mouse, toque de início, botão de teclado, etc). Isso é útil quando você está rastreando quando um usuário libera uma chavede mouse, botão de mouse, toque de tela, etc.

Este evento pode ser usado junto com UserInputService.InputBegan e UserInputService.InputChanged para rastrear quando o usuário começar, alterações e terminar.

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Handling InputEnded

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released 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

O evento UserInputService do <Class.UserInputService> dispara quando há um pedido de pulo do cliente, por exemplo, quando o cliente pressiona a barra de espaço ou botão de pulo no celular.

Este evento é acionado sempre que o usuário tenta fazer seu pularPlayer.Character. O comportamento padrão responde a um pedido de pulo definindo a propriedade Humanoid.Jump do jogador para verdadeiro, o que faz com que o personagem do jogador pular.

O evento pode ser usado para rastrear sempre que um jogador quiser pular. Em vez de usá-lo para fazer um jogador pular, isso deve ser usado para alterar o comportamento de pulo padrão - como desativar pular.

Por exemplo, o código abaixo imprime "Salto" sempre que o jogador envia uma solicitar / pedirde salto.


local UserInputService = game:GetService("UserInputService")
function onJumpRequest()
print("Jump!")
end
UserInputService.JumpRequest:Connect(onJumpRequest)

Como este evento ocorre várias vezes para uma única solicitar / pedirde pulo, é recomendado usar um debounce.

Se você quiser conectar chaves ou botões a outras ações, considere usar eventos, como UserInputService:GetKeysPressed() e UserInputService.InputBegan ou o ContextActionService.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.


Amostras de código

Disable Jumping

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")
-- Fires when the user tries to jump
local function jump()
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
UserInputService.JumpRequest:Connect(jump)

LastInputTypeChanged

O evento UserInputService.LastInputTypeChanged é acionado sempre que o cliente muda como eles estão interagindo através de um dispositivo de interface humano-computador. (i.e. do MouseMovement ao MouseWheel ou do Thumbstick1 ao Thumbstick2).

Para obter o valor do último digitarde entrada, independentemente de ter ou não alterado, você pode usar a função UserInputService:GetLastInputType().

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Parâmetros

lastInputType: Enum.UserInputType

Um Enum.UserInputType indicando o último digitarde entrada.


Amostras de código

Hide Mouse During Keyboard Input

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)

PointerAction

Ação de PontadorAção é acionado quando o usuário executa uma ação de ponto específica. Em particular, rolar a roda do mouse.

Parâmetros

wheel: number
pan: Vector2
pinch: number
gameProcessedEvent: bool

TextBoxFocusReleased

O evento TextBoxFocusRelease ocorre quando um cliente perde o foco em um TextBox - geralmente quando um cliente interrompe a entrada de texto em um TextBox pressionando retornar ou clicando/toque em outro lugar na tela.

Por exemplo, o código abaixo imprime o nome da TextBox perdendo foco quando o evento dispara.


local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)

Pode ser usado ao lado de UserInputService.TextBoxFocused para rastrear quando um TextBox ganha e perde foco.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

textboxReleased: TextBox

O TextBox que perdeu o foco.


Amostras de código

TextBoxFocusReleased

local UserInputService = game:GetService("UserInputService")
UserInputService.TextBoxFocusReleased:Connect(function(textbox)
print("The name of the released focus TextBox is " .. textbox.Name)
end)

TextBoxFocused

O evento TextBoxFocused é acionado quando um ganha foco em um TextBox - normalmente quando um cliente clica/toca em uma caixa de texto para começar a digitar texto. Este também é acionado se um campo de texto for focado usando TextBox:CaptureFocus().

Por exemplo, o código abaixo imprime o nome da TextBox focada quando o evento é disparado.


local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)

Pode ser usado ao lado de UserInputService.FocusReleased para rastrear quando uma caixa de texto ganha e perde foco.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

textboxFocused: TextBox

O TextBox que ganhou foco.


Amostras de código

Modifying a TextBox on Focused and FocusReleased

local UserInputService = game:GetService("UserInputService")
local function textBoxFocused(textBox)
textBox.BackgroundTransparency = 0
end
local function textBoxFocusReleased(textBox)
textBox.BackgroundTransparency = 0.7
end
UserInputService.TextBoxFocused:Connect(textBoxFocused)
UserInputService.TextBoxFocusReleased:Connect(textBoxFocusReleased)

TouchEnded

O evento TouchEnded é acionado quando um usuário solta seu dedo da tela de um dispositivo TouchEnabled, terminando a entrada de toque com o dispositivo.

Este evento pode ser usado para determinar quando um usuário para de tocar a tela de seu dispositivo. Ele pode ser combinado com UserInputService.TouchStarted para determinar quando um usuário para de tocar a tela.

Por exemplo, o código abaixo imprime a posição da tela onde o usuário para de tocar a tela.


local UserInputService = game:GetService("UserInputService")
function TouchEnded(touch, gameProcessedEvent)
print("Touch ended at " .. tostring(touch.Position))
end
UserInputService.TouchEnded:Connect(TouchEnded)

O objeto de entrada de toque é o mesmo objeto de entrada ao longo da vida do toque. Então, comparar InputObjects quando eles são objetos de toque é válido para determinar se é o mesmo dedo.

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

The Difference Between TouchTap and TouchLongPress

local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end

TouchLongPress

Ativado quando um usuário segurar pelo menos um dedo por um curto período de tempo na mesma posição de tela de um dispositivo TouchEnabled.

Este evento pode ser usado para determinar quando um usuário pressiona seu dedo para baixo em um GUI ou elemento.

O exemplo abaixo imprime o state da longa pressão quando o usuário segurar pelo menos um dedo por um curto período de tempo na mesma posição de tela. Os estados possíveis incluem: Começar, Alterar, 1> Fim1>, 4> Cancelar4> e 7> Nenhum7>.


local UserInputService = game:GetService("UserInputService")
function TouchLongPress(TouchPositions, state, gameProcessedEvent)
print("Long press event fired. State of press: " .. tostring(state))
end
UserInputService.TouchLongPress:Connect(TouchLongPress)

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, veja UserInputService.TouchEnabled .

Pode ser emparelhado com UserInputService.TouchStarted e UserInputService.TouchEnded para determinar quando um usuário começa e para de tocar a tela.

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

touchPositions: Array

Um conjunto de Vector2 objetos, indicando a posição dos dedos envolvidos no gesto.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

The Difference Between TouchTap and TouchLongPress

local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end

TouchMoved

O evento TouchMoved é acionado quando um usuário move seu dedo em um dispositivo TouchEnabled.

Este evento pode ser usado para determinar quando um usuário move seu dedo enquanto toca a tela de um dispositivo TouchEnabled. Pode ser útil rastrear se um usuário está movendo seu dedo na tela, bem como onde o usuário está movendo seu dedo.

O código abaixo imprime "Touch moved from" a posição anterior do Vector2 "para" a nova posição do Vector2 do usuário em um dispositivo TouchEnabled.


local UserInputService = game:GetService("UserInputService")
function onTouchMoved(touch, gameProcessedEvent)
local oldPosition = touch.Position - touch.Delta
print("Touch moved from " .. tostring(oldPosition) .. "to " .. tostring(touch.Position))
end
UserInputService.TouchMoved:Connect(onTouchMoved)

Pode ser emparelhado com UserInputService.TouchStarted e UserInputService.TouchEnded para determinar quando um usuário começa a tocar a tela, como seu dedo se move enquanto a toca, e quando eles param de tocar a tela.

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

The Difference Between TouchTap and TouchLongPress

local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end

TouchPan

O evento TouchPan ocorre quando um usuário arrasta pelo menos um dedo em um dispositivo TouchEnabled.

Este evento pode ser usado para determinar quando um usuário move o dedo ao longo da tela de um dispositivo habilitado por toque - como girar o Camera em um script de câmera personalizado.

O trecho abaixo imprime "Velocidade de arrastamento de toque" seguida pela velocidade da mão do usuário quando o usuário arrasta o dedo na tela.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPan:Connect(function(touchPositions, totalTranslation, velocity, state, gameProcessedEvent)
print("Speed of touch drag: " .. tostring(velocity))
end)

Veja outra útil função de UserInputService aqui UserInputService.TouchRotate .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

touchPositions: Array

Um conjunto de Vector2 objetos, indicando as posições dos toques (por exemplo, dedos) envolvidos no gesto.

totalTranslation: Vector2

O tamanho do gesto da panela do começo ao fim (em píxeis).

velocity: Vector2

A velocidade do gesto da panela (em píxeis) por segundo.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

TouchPinch

Iniciado quando um usuário coloca e move dois dedos na tela de um dispositivo TouchEnabled .

Por instância, o exemplo abaixo imprime quanto a escala de zoom da câmera mudou desde o início do toque.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPinch:Connect(function(touchPositions, scale, velocity, state, gameProcessedEvent)
print("Scale difference since beginning of pinch: " .. tostring(scale))
end)

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é executado quando a janela do cliente Roblox está em foco. Por exemplo, os insumos não serão capturados quando a janela for minimizada. Como este evento só é executado localmente, ele só pode ser usado em um LocalScript .

Veja também:

Parâmetros

touchPositions: Array

Um array de Vector2s, indicando a posição da tela, em píxeis, dos dedos envolvidos no gesto de pincamento.

scale: number

A magnitude do pico de início ao fim (em píxeis) dividida pelas posições de pico de início.

velocity: number

A velocidade do gesto de puxo (em píxeis) por segundo.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

TouchRotate

O evento TouchRotate ocorre quando um usuário rota uma mão em um dispositivo TouchEnabled.

Por exemplo, o seguinte código imprime quanto a câmera girou desde o início da rotação de toque.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchRotate:Connect(function(touchPositions, rotation, velocity, state, gameProcessedEvent)
print("Camera has rotated " .. tostring(rotation) .. " degrees!")
end)

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Os scripts principais que controlam a câmera do usuário em um dispositivo móvel usam código que funciona da mesma maneira que este evento. A melhor prática para este evento é usá-lo ao criar um sistema de câmera móvel para sobrescrever os scripts principais padrão.

Veja também:

Parâmetros

touchPositions: Array

Um array de Vector2s, indicando as posições dos dedos envolvidos no gesto.

rotation: number

O número de grau que o gesto girou desde o início do gesto.

velocity: number

A mudança de rotação (em graus) dividida pela duração da mudança (em segundos).

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

TouchStarted

O evento TouchStarted é acionado quando um usuário coloca seu dedo em um dispositivo TouchEnabled, começando a entrada de toque com o dispositivo.

Este evento pode ser usado para determinar quando um usuário começa a tocar a tela de seu dispositivo. Ele pode ser emparelhado com UserInputService.TouchEnded para determinar quando um usuário começa e para de tocar a tela.

O objeto de entrada de toque é o mesmo objeto de entrada ao longo da vida do toque. Então, comparar InputObjects quando eles são objetos de toque é válido para determinar se é o mesmo dedo.

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

Uma instância InputObject, que contém informações sobre a entrada do usuário.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Tracking Touches

local UserInputService = game:GetService("UserInputService")
local dragging
local dragInput
local dragStart
local startPos
local gui = script.Parent
local function touchStarted(input, _gameProcessed)
if not dragging then
dragging = true
dragInput = input
dragStart = input.Position
startPos = gui.Position
end
end
local function update(input, _gameProcessed)
if input == dragInput and dragging then
local delta = input.Position - dragStart
gui.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end
local function touchEnded(input, _gameProcessed)
if input == dragInput then
dragging = false
end
end
UserInputService.TouchStarted:Connect(touchStarted)
UserInputService.TouchMoved:Connect(update)
UserInputService.TouchEnded:Connect(touchEnded)

TouchSwipe

O evento TouchSwipe ocorre quando um usuário toca com seus dedos em um dispositivo TouchEnabled.

Este evento pode ser usado para determinar quando um usuário desliza seus dedos na tela de seu dispositivo e na direção que o usuário deslizou.

Para um rastreamento mais preciso do movimento da entrada de toque, use usando UserInputService.TouchMoved

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Veja também:

Parâmetros

swipeDirection: Enum.SwipeDirection

Um Enum.SwipeDirection, indicando a direção que o usuário deslizou.

numberOfTouches: number

Número de toques (por exemplo, dedos) envolvidos no gesto.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

Touch Swipe a GUI

local UserInputService = game:GetService("UserInputService")
local gui = script.Parent
local swipePositionY = gui.Position.Y.Offset
local swipePositionX = gui.Position.X.Offset
local camera = workspace.CurrentCamera
local maxY = camera.ViewportSize.Y - gui.Size.Y.Offset
local maxX = camera.ViewportSize.X - gui.Size.X.Offset
local function TouchSwipe(swipeDirection, _numberOfTouches, _gameProcessedEvent)
if swipeDirection == Enum.SwipeDirection.Up then
swipePositionY = math.max(swipePositionY - 200, 0)
elseif swipeDirection == Enum.SwipeDirection.Down then
swipePositionY = math.min(swipePositionY + 200, maxY)
elseif swipeDirection == Enum.SwipeDirection.Left then
swipePositionX = math.max(swipePositionX - 200, 0)
elseif swipeDirection == Enum.SwipeDirection.Right then
swipePositionX = math.min(swipePositionX + 200, maxX)
end
gui:TweenPosition(UDim2.new(0, swipePositionX, 0, swipePositionY), "Out", "Quad", 0.25, true)
end
UserInputService.TouchSwipe:Connect(TouchSwipe)

TouchTap

O evento TouchTap ocorre quando o usuário toca/toque seu dedo na tela em um dispositivo TouchEnabled .

Este evento será acionado, independentemente de o usuário tocar/tocar o mundo do jogo ou um elemento GUI. Se você estiver procurando um evento que apenas será acionado quando o usuário tocar/tocar o mundo do jogo, use UserInputService.TouchTapInWorld .

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.

Parâmetros

touchPositions: Array

Um conjunto de Vector2 objetos, indicando a posição dos dedos envolvidos no gesto de toque.

gameProcessedEvent: bool

Indica se o motor de jogo observou internamente este input e agiu sobre ele. Normalmente, isso se refere à processagem de UI, então se um botão for tocado ou clicado a partir deste input, gameProcessedEvent será true . Isso também é verdadeiro para eventos de entrada conectados via ContextActionService.


Amostras de código

The Difference Between TouchTap and TouchLongPress

local UserInputService = game:GetService("UserInputService")
-- The parent of this script (a ScreenGui)
local touchScreenGui = script.Parent
-- Create the GUI frame that the user interacts with through Touch
-- events
local touchGui = Instance.new("Frame")
touchGui.Name = "TouchGui"
touchGui.AnchorPoint = Vector2.new(0.5, 0.5)
-- Fires when the touches their device's screen
local function TouchTap(touchPositions, _gameProcessedEvent)
touchGui.Parent = touchScreenGui
touchGui.Position = UDim2.new(0, touchPositions[1].X, 0, touchPositions[1].Y)
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Fires when a user starts touching their device's screen and does not
-- move their finger for a short period of time
local function TouchLong(_touchPositions, _state, _gameProcessedEvent)
touchGui.Size = UDim2.new(0, 100, 0, 100)
end
-- Fires when the user moves their finger while touching their device's
-- screen
local function TouchMove(touch, _gameProcessedEvent)
touchGui.Position = UDim2.new(0, touch.Position.X, 0, touch.Position.Y)
end
-- Fires when the user stops touching their device's screen
local function TouchEnd(_touch, _gameProcessedEvent)
touchGui.Parent = nil
touchGui.Size = UDim2.new(0, 50, 0, 50)
end
-- Only use the Touch events if the user is on a mobile device
if UserInputService.TouchEnabled then
UserInputService.TouchTap:Connect(TouchTap)
UserInputService.TouchLongPress:Connect(TouchLong)
UserInputService.TouchMoved:Connect(TouchMove)
UserInputService.TouchEnded:Connect(TouchEnd)
end

TouchTapInWorld

O evento TouchTapInWorld é acionado quando o usuário toca/toque o dedo na tela em um dispositivo TouchEnabled. Ele é acionado quando o usuário toca no mundo do jogo.

Este evento pode ser usado para determinar quando um usuário toca a tela e não toca um elemento GUI. Se o usuário tocar um elemento GUI, UserInputService.TouchTap será executado em vez de TouchTapInWorld.

Para verificar se o dispositivo de um usuário está habilitado para toque, e que eventos de toque serão Iniciar / executar, consulte UserInputService.TouchEnabled .

Este evento só é acionado quando a janela do cliente Roblox estiver em foco. Por exemplo, as entradas não serão capturadas quando a janela for minimizada.

Como ele só é executado localmente, ele só pode ser usado em um LocalScript .

Veja também:

Parâmetros

position: Vector2

Um Vector2 indicando a posição do toque.

processedByUI: bool

Se o usuário tocou um elemento da GUI.


Amostras de código

Create a Part in World at Touch Position

local UserInputService = game:GetService("UserInputService")
local camera = workspace.CurrentCamera
local LENGTH = 500
local function createPart(position, processedByUI)
-- Do not create a part if the player clicked on a GUI/UI element
if processedByUI then
return
end
-- Get Vector3 world position from the Vector2 viewport position
local unitRay = camera:ViewportPointToRay(position.X, position.Y)
local ray = Ray.new(unitRay.Origin, unitRay.Direction * LENGTH)
local hitPart, worldPosition = workspace:FindPartOnRay(ray)
-- Create a new part at the world position if the player clicked on a part
-- Do not create a new part if player clicks on empty skybox
if hitPart then
local part = Instance.new("Part")
part.Parent = workspace
part.Anchored = true
part.Size = Vector3.new(1, 1, 1)
part.Position = worldPosition
end
end
UserInputService.TouchTapInWorld:Connect(createPart)

WindowFocusReleased

O evento UserInputService WindowFocusRelease ocorre quando a janela do cliente Roblox perde foco - normalmente quando o cliente Roblox é minimizado pelo usuário.

Por exemplo, o código abaixo imprime "Window focus released" sempre que o cliente Roblox perde foco.


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocusReleased:Connect(function()
print("Window focus released")
end)

Este evento pode ser usado ao lado de UserInputService.WindowFocused para rastrear se o cliente Roblox está focado ativamente na tela de um usuário.

Como ele só é executado localmente, ele só pode ser usado em um LocalScript .


Amostras de código

Window Focus AFK Script (Script)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
Window Focus AFK Script (LocalScript)

local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)

WindowFocused

O evento UserInputService WindowFocused é acionado quando o foco da janela do cliente Roblox é obtido - normalmente quando o cliente Roblox estiver maximizado/ativamente aberto na tela do usuário.

Por exemplo, o código abaixo imprime "Janela focada" sempre que o cliente Roblox ganha foco.


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)

Este evento pode ser usado ao lado de UserInputService.WindowFocusReleased para rastrear se o cliente Roblox está focado ativamente na tela de um usuário.

Como este evento só é executado localmente, ele só pode ser usado em um LocalScript.


Amostras de código

Window Focus AFK Script (Script)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
Window Focus AFK Script (LocalScript)

local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)