UserInputService
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
UserInputService é um serviço usado para detectar e capturar os diferentes tipos de entrada disponíveis 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
-- 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
Descreve se o dispositivo do usuário tem um acelerômetro.
Descreve se o dispositivo usado por um usuário tem um controle / controle de jogodisponível.
Descreve se o dispositivo do usuário tem um giroscópio.
Descreve se o dispositivo do usuário tem um teclado disponível.
Determina se o mouse do usuário pode ser movido livremente ou está bloqueado.
Escala a saída de escala (mudança) do usuário's Mouse .
Descreve se o dispositivo do usuário tem um mouse disponível.
O ID de conteúdo da imagem usada como o ícone do mouse do usuário.
Determina se o ícone Mouse é visível.
Determina a posição do teclado na tela.
Determina o tamanho do teclado na tela.
Descreve se um teclado na tela está atualmente visível na tela do usuário.
Descreve se o dispositivo atual do usuário tem uma tela de toque disponível.
Indica se o usuário está usando um óculosde realidade virtual.
Métodos
Retorna se o gamepad dado Enum.UserInputType suporta um botão correspondente ao dado Enum.KeyCode .
Retorna um conjunto de Enum.UserInputType gamepads atualmente conectados.
Retorna um InputObject que descreve a aceleração atual do dispositivo.
Retorna um InputObject descrevendo o vetor de gravidade atual do dispositivo.
Retorna um InputObject e um CFrame, descrevendo o dispositivoatual de vetor.
Retorna o atualmente TextBox que o cliente está focado no momento.
Retorna se um gamepad com o Enum.UserInputType "gamepadNum" está conectado.
Retorna um array de InputObjects para todos os controles disponíveis no controle / controle de jogo, representando o último estado de entrada de cada entrada.
Retorna uma imagem para o Enum.KeyCode
Retorna um array de InputObjects associado com o keys atualmente pressionado.
Retorna o Enum.UserInputType associado ao mais recente entrada do usuário.
Retorna um array de InputObjects correspondendo aos botões do mouse atualmente pressionados.
Retorna a mudança, em píxeis, da posição do jogador's Mouse na última renderização. Só funciona se o mouse estiver bloqueado.
Retorna a localização de tela atual do jogador em Mouse relativo ao canto superior esquerdo da tela.
Retorna um array de gamepads conectado e ativado para navegação GUI na ordem de prioridade descendente.
Retorna uma string representando uma chave que o usuário deve pressionar para inserir um determinado Enum.KeyCode .
Retorna um array de KeyCodes que o gamepad associado com o Enum.UserInputType suporta.
Determina se um botão específico é pressionado em um determinado controle / controle de jogo.
Retorna se o key dado está atualmente bloqueado.
Retorna se o botão mouse button é atualmente pressionado.
Retorna verdadeiro se a gamepad especificada Enum.UserInputType for permitida para controlar a navegação GUIs.
Recenters o CFrame da VR headset para a orientação atual do headset usado pelo usuário.
Define se o Gamepad navigator pode ou não mover o GUI navigator.
Eventos
Ativado quando um usuário move um dispositivo que tem um acelerômetro. Usado para rastrear o movimento de dispositivos reais dentro de um jogo Roblox.
Ativado quando a força da gravidade muda em um dispositivo que tem um acelerômetro ativado - como um dispositivo móvel.
Ativado quando um usuário gira um dispositivo que tem um giroscópio.
Dispara quando um gamepad é conectado ao cliente. Transmite o “gamepadNum” do gamepad que foi conectado.
Dispara quando um gamepad é desconectado do cliente. Passa o Enum.UserInputType do gamepad que foi desconectado.
Iniciado quando um usuário começa a interagir via um dispositivo de interface humano-computador - como um mouse ou controle / controle de jogo.
Ativado quando um usuário muda como eles estão interagindo através de um dispositivo de interface humano-computador.
Dispara quando um usuário para de interagir via um dispositivo de interface humano-computador.
Dispara sempre que o cliente faz uma solicitação para que seu personagem pular.
Fires quando o cliente's Enum.UserInputType é alterado.
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : bool):RBXScriptSignal
Dispara quando o usuário executa uma ação de ponteiro específica (rotação, pincelamento, girar).
Exibido quando o cliente perde o foco em um TextBox.
Iniciado quando o cliente foca em um TextBox.
Dispensado quando um usuário solta seu dedo da tela em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Ativado quando um usuário segurar pelo menos um dedo por um curto período de tempo na mesma posição de tela em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Ativado quando um usuário move o dedo em um dispositivo Ativado por Tocos - como a tela de um Apple iPad ou iPhone ou um telefone Android Google.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Iniciado quando um usuário arrasta pelo menos um dedo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Iniciado quando um usuário pinca seus dedos em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Dispara quando um usuário gira duas dedos em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Dispensado quando um usuário coloca o dedo em um dispositivo Ativado por Tocos - como a tela de um Apple iPad ou iPhone ou um Google Android telefone.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
Iniciado quando um usuário passa o dedo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Iniciado quando um usuário toca seu dedo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Dispara quando um usuário toca o mundo do jogo em um dispositivo TouchEnabled - como a tela de um dispositivo móvel.
Dispara quando a janela do cliente Roblox perde o foco na tela do usuário.
Dispara quando a janela do cliente Roblox ganha foco na tela do usuário.
Propriedades
AccelerometerEnabled
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.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("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
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
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
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
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
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.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("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
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
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
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
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:
- Padrão : O mouse se move livremente ao redor da tela do usuário.
- LockCenter : O mouse está bloqueado e não pode ser movido do centro da tela do usuário.
- 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
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
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
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
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
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 thenprint("The user's device has an available mouse!")elseprint("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
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
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
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
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
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
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
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
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
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
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 thenprint("The user's device has a touchscreen!")elseprint("The user's device does not have a touchscreen!")end
Veja também:
Amostras de código
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
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.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("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
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
O Enum.UserInputType do controle / controle de jogo.
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
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
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
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
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:
- A propriedade delta descreve a quantidade de rotação que aconteceu pela última vez
- O CFrame é a rotação atual do dispositivo em relação à sua referência padrão.
Amostras de código
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
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
O Enum.UserInputType do gamepad em questão.
Devolução
Se um gamepad associado com Enum.UserInputType está conectado.
Amostras de código
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
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
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
O Enum.KeyCode para qual se deve obter a imagem associada.
Devolução
O ID de ativo de imagem retornado.
Amostras de código
local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappedIconImage = UserInputService:GetImageForKeyCode(key)
imageLabel.Image = mappedIconImage
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
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
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>
Nome | Descriçã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
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
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)
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
Amostras de código
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:
- UserInputService:SetNavigationGamepad() , para ativar ou desativar um gamepad para navegação GUI
- UserInputService:IsNavigationGamepad() , para verificar se um gamepad está habilitado para navegação GUI
- UserInputService:GetConnectedGamepads() , para retornar todos os gamepads conectados, independentemente do controle de navegação GUI
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.Parentlocal mapKey = Enum.KeyCode.MtextLabel.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 chave | Retornar 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 chave | Retornar 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.Parentlocal key = Enum.KeyCode.ButtonAlocal mappings = {ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA assetButtonCross = "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 chave | Valor de retorno da PlayStation | Valor 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 chave | Imagem | ID do ativo |
---|
Parâmetros
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
O Enum.UserInputType do controle / controle de jogo.
Devolução
Amostras de código
local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- 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.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local 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:
- UserInputService:IsKeyDown() - Um método semelhante com um uso diferente: Verificar se um key em um keyboard é pressionado.
Parâmetros
O Enum.UserInputType do controle / controle de jogodado.
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
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:
- Enum.UserInputType.IsGamepadButtonDown - Um evento similar com um uso diferente: Verificar se um button dado em um gamepad é pressionado.
Parâmetros
O Enum.KeyCode da chave.
Devolução
Se a chave especificada está sendo pressionada.
Amostras de código
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
O Enum.UserInputType do botão do mouse.
Devolução
Se o botão de mouse dado está atualmente pressionado.
Amostras de código
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) thenprint("Gamepad is a navigation gamepad!")elseprint("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
O Enum.UserInputType do controle / controle de jogoespecificado.
Devolução
Se a gamepad especificada for um controle / controle de jogode navegação.
RecenterUserHeadCFrame
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
Amostras de código
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
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
O Enum.UserInputType do controle / controle de jogoespecificado.
Se a gamepad especificada pode mover o navegador de GUI.
Devolução
Amostras de código
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
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
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
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
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
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
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.
Amostras de código
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
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
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
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.
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
-- 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.
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
-- 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.
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
-- 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
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
Um Enum.UserInputType indicando o último digitarde entrada.
Amostras de código
local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)
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
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
Amostras de código
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
Amostras de código
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.
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
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
Um conjunto de Vector2 objetos, indicando a posição dos dedos envolvidos no gesto.
O Enum.UserInputState do gesto.
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
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.
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
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
Um conjunto de Vector2 objetos, indicando as posições dos toques (por exemplo, dedos) envolvidos no gesto.
O tamanho do gesto da panela do começo ao fim (em píxeis).
A velocidade do gesto da panela (em píxeis) por segundo.
O Enum.UserInputState do gesto.
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
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
Um array de Vector2s, indicando a posição da tela, em píxeis, dos dedos envolvidos no gesto de pincamento.
A magnitude do pico de início ao fim (em píxeis) dividida pelas posições de pico de início.
A velocidade do gesto de puxo (em píxeis) por segundo.
O Enum.UserInputState do gesto.
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
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
O número de grau que o gesto girou desde o início do gesto.
A mudança de rotação (em graus) dividida pela duração da mudança (em segundos).
O Enum.UserInputState do gesto.
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
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.
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
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
Um Enum.SwipeDirection, indicando a direção que o usuário deslizou.
Número de toques (por exemplo, dedos) envolvidos no gesto.
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
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
Um conjunto de Vector2 objetos, indicando a posição dos dedos envolvidos no gesto de toque.
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
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
Se o usuário tocou um elemento da GUI.
Amostras de código
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
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)
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
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)
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)