UserInputService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
UserInputService es un servicio utilizado para detectar y capturar los diferentes tipos de entrada disponibles en el dispositivo de un usuario.
El propósito principal de este servicio es permitir que las experiencias cooperen con múltiples formas de entrada disponibles, como gamepads, pantallas táctiles y teclados. Esto permite que un LocalScript realice diferentes acciones dependiendo del dispositivo y, a su vez, proporcione la mejor experiencia para el usuario final.
Algunos usos de este servicio incluyen la detección de la entrada del usuario cuando interactúan con GUI, herramientas y otras instancias del juego. Para detectar la entrada del usuario, el servicio debe buscar un evento del servidor. Por ejemplo, el servicio puede detectar eventos como cuando el usuario toca la pantalla de un dispositivo móvil usando Class.UserInputService.TouchStarted
Dado que este servicio es solo client-side, sólo funcionará cuando se use en un LocalScript o un ModuleScript requerido por un LocalScript . Como UserInputService es sólo client-side, los usuarios en el juego sólo pueden detectar su propia entrada - y no la entrada de otros.
También véase ContextActionService, un servicio que le permite vincular funciones a múltiples entradas del usuario.
Muestras 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)
Resumen
Propiedades
Describe si el dispositivo del usuario tiene un acelerómetro.
Describe si el dispositivo utilizado por un usuario tiene una plataforma de juegos disponible.
Describe si el dispositivo del usuario tiene un giroscopio.
Describe si el dispositivo del usuario tiene una teclado disponible.
Determina si el mouse del usuario puede ser movido libremente o está bloqueado.
Escala la salida de la curva (cambio) del usuario. Mouse .
Describe si el dispositivo del usuario tiene un mouse disponible.
El ID de contenido de la imagen utilizada como íconode usuario.
Determina si el icono de Mouse es visible.
Determina la posición de la teclado en la pantalla.
Determina el tamaño del teclado en la pantalla.
Describe si una teclado en la pantalla es visible en la pantalla del usuario.
Describe si el dispositivo actual del usuario tiene una pantalla táctil disponible.
Indica si el usuario está usando un visorde realidad virtual.
Métodos
Devuelve si la plataforma de juego Enum.UserInputType soporta un botón que coincida con el dado Enum.KeyCode .
Devuelve un arreglo de Enum.UserInputType pads de juego conectados actualmente.
Regresa un Class.InputObject que describe la aceleración actual del dispositivo.
Devuelve un Class.InputObject que describe el fuerza vectorialde gravedad actual del dispositivo.
Retorna un InputObject y un CFrame, que describen el dispositivo's fuerza vectorialactual.
Devuelve el valor actual de TextBox al que el cliente está enfocado actualmente.
Devuelve si un gamepad con el dado Enum.UserInputType "gamepadNum" está conectado.
Devuelve un arreglo de InputObjects para todos los controles disponibles en el controlador para juegodado, representando el estado de entrada de cada entrada.
Devuelve una imagen para el solicitado Enum.KeyCode .
Devuelve un arreglo de InputObjects asociado con el keys actualmente presionado.
Devuelve el tipo Enum.UserInputType asociado con la entrada más reciente del usuario.
Devuelve un arreglo de InputObjects que coincida con los botones de ratón actualmente apretados.
Devuelve el cambio, en píxeles, de la posición del jugador en el último marco de renderizado. Sólo funciona si el mouse está bloqueado.
Devuelve la ubicación de la pantalla actual del jugador, Mouse relativa a la esquina superior izquierda de la pantalla.
Retorna un arreglo de gamepads conectado y habilitado para la navegación de GUI en orden descendente de prioridad.
Devuelve una cadena que representa una llave que el usuario debe presionar para introducir un dado Enum.KeyCode .
Devuelve un arreglo de KeyCodes que el gamepad asociado con el dado Enum.UserInputType soporta.
Determina si se presiona un botón en particular en un controlador para juegoen particular.
Devuelve si el dado key está actualmente bloqueado.
Devuelve si el botón dado mouse button está actualmente apretado.
Devuelve true si el gamepad especificado Enum.UserInputType está permitido para controlar la navegación GUIs .
Recenters el CFrame de la VR headset a la orientación actual de la headset usada por el usuario.
Establece si el especificado Gamepad puede mover el navegador.
Eventos
Se activó cuando un usuario se mueve un dispositivo que tiene un acelerómetro. Se usa para rastrear el movimiento de dispositivos en el mundo real dentro de un juego de Roblox.
Se activó cuando la fuerza de gravedad cambió en un dispositivo que tiene un acelerómetro habilitado - como un dispositivo móvil.
Se activó cuando un usuario gira un dispositivo que tiene un giroscopio.
Se activa cuando se conecta un gamepad al cliente. Pasa el "gamepadNum" del gamepad que se conectó.
Se activa cuando se desconecta un gamepad del cliente. Pasa el Enum.UserInputType del gamepad que se desconectó.
Se activa cuando un usuario comienza a interactuar a través de un dispositivo de interfaz humana-ordenador, como un mouse o un controlador para juego.
Se ha disparado cuando un usuario cambia cómo interactúa a través de un dispositivo de interfaz humana-ordenador.
Se activa cuando un usuario deja de interactuar a través de un dispositivo de interfaz humana-ordenador.
Dispara cuando el cliente hace una solicitud para que salto.
Se activa cuando el cliente cambia el Enum.UserInputType .
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : bool):RBXScriptSignal
Se activa cuando el usuario realiza una acción de puntería específica (rueda, pincha, desplazar).
Se activa cuando el cliente pierde el enfoque en un TextBox .
Se ha disparado cuando el cliente se ha enfocado en un TextBox .
Se activa cuando un usuario suelta su dedo de la pantalla en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Se activa cuando un usuario sostiene al menos un dedo por un corto período de tiempo en la misma posición de pantalla en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
Se activa cuando un usuario mueve su dedo en un dispositivo habilitado para tocar - como la pantalla de un Apple iPad o iPhone o un teléfono Android de Google.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Se activa cuando un usuario arrastra al menos un dedo en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Se activa cuando un usuario toca sus dedos en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Dispara cuando un usuario gira dos dedos en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
Se activa cuando un usuario coloca su dedo en un dispositivo habilitado para tocar - como la pantalla de un Apple iPad o iPhone o un teléfono Android de Google.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
Se activa cuando un usuario toca con los dedos en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
Se activa cuando un usuario toca con su dedo en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
Se activa cuando un usuario toca el mundo del juego en un dispositivo TouchEnabled - como la pantalla de un dispositivo móvil.
Se activa cuando la ventana del cliente de Roblox pierde el enfoque en la pantalla del usuario.
Se activa cuando la ventana del cliente de Roblox gana enfoque en la pantalla del usuario.
Propiedades
AccelerometerEnabled
Esta propiedad describe si el dispositivo del usuario tiene un acelerómetro
Un acelerómetro es un componente que se encuentra en la mayoría de los dispositivos móviles que mide la aceleración (cambio de velocidad).
Por ejemplo, el siguiente código de ejemplo muestra cómo verificar si el dispositivo del usuario tiene un acelerómetro.
local UserInputService = game:GetService("UserInputService")local accelerometerEnabled = UserInputService.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("Accelerometer not enabled!")end
Si el dispositivo tiene un acelerómetro habilitado, puedes obtener su aceleración actual usando la función UserInputService:GetDeviceAcceleration() o el rastro cuando la aceleración del dispositivo cambia usando el evento UserInputService.DeviceAccelerationChanged .
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Muestras 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
Esta propiedad describe si el dispositivo utilizado por un usuario tiene una consola de juegos disponible. Si las consolas de juegos están disponibles, puede usar UserInputService:GetConnectedGamepads() para recuperar una lista de consolas de juegos conectadas.
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Véase también:
Muestras 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 propiedad describe si el dispositivo del usuario tiene un giroscopio.
Un giroscopio es un componente que se encuentra en la mayoría de los dispositivos móviles que detecta la orientación y la velocidad de rotación.
Si el dispositivo de un usuario tiene un giroscopio, puede usarlo en su juego usando la función UserInputService:GetDeviceRotation() y el evento Class.UserInputService.DeviceRotationChanged ".
local UserInputService = game:GetService("UserInputService")local gyroIsEnabled = UserInputService.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("Gyroscope is not enabled!")end
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Muestras 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
Esta propiedad describe si el dispositivo del usuario tiene un teclado disponible. Esta propiedad es true cuando el dispositivo del usuario tiene un teclado disponible, y false cuando no lo tiene.
Se puede usar para determinar si el usuario tiene un teclado disponible - lo cual puede ser importante si quieres ver si puedes usar UserInputService:IsKeyDown() o UserInputService:GetKeysPressed() para comprobar la entrada del teclado.
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Muestras 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 propiedad establece cómo se comporta el mouse del usuario según el Enum.MouseBehavior Enum. El valor predeterminado es Enum.MouseBehavior.Default.
Puede establecerse en tres valores:
- Por defecto : El mouse se mueve libremente alrededor de la pantalla del usuario.
- Bloqueo del centro del ratón : El ratón está bloqueado y no se puede mover del centro de la pantalla del usuario.
- Bloquear la posición actual : El mouse está bloqueado, y no puede moverse desde, está posición actual en la pantalla del usuario en el momento de bloqueo.
El valor de esta propiedad no afecta la sensibilidad del seguimiento de eventos del movimiento del mouse. Por ejemplo, GetMouseDelta devuelve la misma posición de la pantalla de Vector2 independientemente de si el mouse está bloqueado o puede moverse libremente alrededor de la pantalla del usuario. Como resultado, los scripts predeterminados como los que controlan la cámara no
Esta propiedad se anula si un GuiButton con Modal habilitado está GuiButton.Visible a menos que el botón derecho del mouse del jugador esté apuntado.
Nota que, si el mouse está bloqueado, UserInputService.InputChanged aún se ejecutará cuando el jugador mueva el mouse y pasará en el Delta que el mouse intentó mover. Además, si el jugador es expulsado del juego, el mouse se desbloqueará de forma forzada.
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Muestras 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
Esta propiedad determina la sensibilidad del usuario de Mouse .
La sensibilidad determina la medida en que se traduce un movimiento del mouse físico a un movimiento del mouse en el juego. Esto se puede usar para ajustar la sensibilidad de los eventos que rastrean el movimiento del mouse, como GetMouseDelta , a los movimientos del mouse.
Esta propiedad no afecta el movimiento del íconodel mouse. Tampoco afecta la configuración de Sensibilidad de la cámara que se encuentra en la pestaña Configuración del menú de Configuración del cliente, que también ajusta la sensibilidad del seguimiento del movimiento del mouse.
Esta propiedad tiene un valor máximo de 10 y un valor mínimo de 0. Un valor más bajo coincide con menor sensibilidad y un valor más alto con mayor sensibilidad.
Cuando la sensibilidad es 0, los eventos que rastrean el movimiento del ratóntodavía se dispararán, pero todos los parámetros y propiedades que indican el cambio en la posición del mouse se devolverán Vector2.new() , o Vector3.new() en el caso de <
Muestras 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
Esta propiedad describe si el dispositivo del usuario tiene un mouse disponible. Esta propiedad es true cuando el dispositivo del usuario tiene un ratóndisponible, y false cuando no lo hace.
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
Es importante comprobar esto antes de usar las funciones del mouse UserInputService como UserInputService:GetMouseLocation() .
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Véase también:
Muestras 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
La propiedad MouseIcon determina la imagen utilizada como puntero. Si no hay valor, se utiliza una flecha predeterminada. Mientras el cursor se posiciona sobre ciertos objetos de la interfaz de usuario, como un ImageButton , TextButton , 1> Class.Loaded1> o 4> Class.ProximityProm
Para ocultar el cursor por completo, no use una imagen transparente. En cambio, configure Class.UserInputService.MouseIconEnabled para false.
Muestras 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
Esta propiedad determina si el icono de Mouse es visible Cuando true el icono del ratónes visible, cuando false no lo es.
Por ejemplo, el código de muestra a continuación oculta el íconodel ratón.
local UserInputService = game:GetService("UserInputService")UserInputService.MouseIconEnabled = false
Como UserInputService es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Muestras 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
Esta propiedad describe la posición de la teclado en la pantalla en píxeles. La posición de la teclado es Vector2.new(0, 0) cuando no es visible.
Como UserInputService es solo del lado del client, esta propiedad solo se puede usar en un LocalScript o un Script con 1> Class.BaseScript.RunContext|RunContext1> configurado para 4> Enum.RunContext.Client4> .
También se vé OnScreenKeyboardVisible y OnScreenKeyboardSize .
Muestras de código
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
Esta propiedad describe el tamaño del teclado en píxeles. El tamaño del teclado es Vector2.new(0, 0) cuando no es visible.
Como UserInputService es solo del lado del client, esta propiedad solo se puede usar en un LocalScript o un Script con 1> Class.BaseScript.RunContext|RunContext1> configurado para 4> Enum.RunContext.Client4> .
También se vé OnScreenKeyboardVisible y OnScreenKeyboardPosition .
OnScreenKeyboardVisible
Esta propiedad describe si un teclado en la pantalla es visible en la pantalla del usuario.
Como UserInputService es solo del lado del client, esta propiedad solo se puede usar en un LocalScript o un Script con 1> Class.BaseScript.RunContext|RunContext1> configurado para 4> Enum.RunContext.Client4> .
También se vea OnScreenKeyboardSize y OnScreenKeyboardPosition .
TouchEnabled
Esta propiedad describe si el dispositivo actual del usuario tiene una pantalla táctil disponible.
La propiedad se usa para determinar si el dispositivo del usuario tiene una pantalla táctil, y por lo tanto si los eventos de toque se desencadenar. Si TouchEnabled está verdadero, puede usar los eventos de entrada de usuario como UserInputService.TouchStarted y UserInputService.TouchEnded para rastrear cuando un usuario comienza y termina tocando la pantalla de su dispositivo.
El código de muestra de abajo imprime si el dispositivo del usuario tiene una pantalla táctil.
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
Véase también:
Muestras 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
Esta propiedad describe si el usuario está usando un dispositivo de realidad virtual (VR).
Si se habilita un dispositivo VR, puede interactuar con su ubicación y movimiento a través de funciones como UserInputService:GetUserCFrame() . También puede reaccionar a los movimientos del dispositivo VR usando el 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 es solo del lado del cliente, esta propiedad solo se puede usar en un LocalScript .
Véase también:
Muestras 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
Esta función devuelve si la plataforma de juego Enum.UserInputType soporta un botón que coincida con el Enum.KeyCode dado. Esta función se usa para determinar las entradas de gamepad válidas.
Para determinar qué juegos de pads de Enum.UserInputType están conectados, usa UserInputService:GetConnectedGamepads() .
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juego.
El Enum.KeyCode del botón en cuestión.
Devuelve
Si el controlador de juegos proporcionado soporta un botón que coincida con el dado Enum.KeyCode .
Muestras 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
Esta función devuelve un arreglo de Enum.UserInputType pads de juego actualmente conectados. Si no hay pads de juego conectados, este arreglo estará vacío. Además, sólo devuelve objetos de tipo de entrada que son pads de juego. Por instancia, este evento devolverá un objeto de tipo de entrada conectado pero no un objeto de teclado.
Por ejemplo, el siguiente código muestra cómo recuperar las plataformas de juego conectadas y almacenarlas en una variable llamada connectedGamepads .
local UserInputService = game:GetService("UserInputService")local connectedGamepads = UserInputService:GetConnectedGamepads()
Para verificar si se ha conectado un controlador específico, use UserInputService:GetGamepadConnected() .
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Véase también:
Devuelve
Un arreglo de UserInputTypes que coincida con los gamepads conectados al dispositivo del usuario.
Muestras 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
La función GetDeviceAcceleration determina la aceleración actual del dispositivo del usuario. Se返回一个 InputObject que describe la aceleración actual del dispositivo.
Para que esto funcione, el dispositivo del usuario debe tener un acelerómetro habilitado. Para verificar si el dispositivo del usuario tiene un acelerómetro habilitado, puede verificar la propiedad UserInputService.AccelerometerEnabled .
Si desea rastrear cuando cambia la aceleración del dispositivo del usuario en su lugar, puede usar el evento UserInputService.DeviceAccelerationChanged .
Dado que solo se ejecuta localmente, solo se puede usar en un LocalScript .
Devuelve
Muestras 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
Esta función InputObject que describe el dispositivo's current gravity fuerza vectorial.
El vector de gravedad se determina por la orientación del dispositivo en relación con la fuerza de gravedad del mundo real. Por instancia, si un dispositivo está perfectamente erguido (retrato), el vector de gravedad es Vector3.new(0, 0, -9.18) . Si el lado izquierdo del dispositivo está apunt
Esta función se puede usar para habilitar el dispositivo del usuario para impactar o controlar la gravedad dentro del juego o mover objetos en el juego como una bola.
Solo se rastrea la gravedad para los jugadores que usan un dispositivo con un giroscopio habilitado, como un dispositivo móvil.
Para ver si el dispositivo de un usuario tiene un giroscopio habilitado, verifique el valor de UserInputService.GyroscopeEnabled . Si el dispositivo tiene un giroscopio habilitado, también puede usar el evento UserInputService.DeviceGravityChanged para rastrear cuando cambia la fuerza de gravedad en el dispositivo del usuario.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
Muestras 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
Esta función返回一个 InputObject y un CFrame que describen el fuerza vectorialde rotación actual del dispositivo.
Esto se activa con un objeto de entrada. La propiedad Position del objeto de entrada es un Enum.InputType.Gyroscope que rastrea la rotación total en cada eje local.
La rotación del dispositivo solo se puede rastrear en dispositivos con un gyroscope .
Dado que esta función se ejecuta localmente, solo se puede usar en un LocalScript .
Devuelve
Un tutorial que contiene dos propiedades:
- La propiedad Delta describe la cantidad de rotación que tuvo lugar por última vez
- El CFrame es la rotación actual del dispositivo en relación con su marco de referencia predeterminado.
Muestras 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
Esta función devuelve el TextBox que el cliente está enfocado en este momento. Un TextBox se puede seleccionar manualmente por el usuario, o la selección se puede forzar usando la función TextBox:CaptureFocus(). Si no se selecciona ningún TextBox, esta función devolverá nil .
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Véase también:
Devuelve
Muestras 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
Esta función devuelve si un gamepad con el Enum.UserInputType está conectado al cliente.
Esto se puede usar para verificar si un controlador para juegoespecífico, como 'Gamepad1' está conectado al dispositivo del cliente.
Para recuperar una lista de todos los gamepads conectados, usa UserInputService:GetConnectedGamepads() .
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del gamepad en cuestión.
Devuelve
Si una consola de juegos asociada con Enum.UserInputType está conectada.
Muestras 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
Esta función devuelve un arreglo de InputObjects para todos los controles disponibles en el controlador para juegodado, representando el estado de entrada de cada entrada.
Para encontrar el UserInputTypes de los gamepads conectados, usa UserInputService:GetConnectedGamepads() .
Dado que esta función solo se ejecuta localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType correspondiente con el gamepad en cuestión.
Devuelve
Un arreglo de InputObjects representando el estado actual de todos los controles disponibles para la plataforma de juegos dada.
GetImageForKeyCode
Este método toma el solicitado Enum.KeyCode y devuelve la imagen asociada para el dispositivo de juego conectado actual (limitado a Xbox, PlayStation y Windows). Esto significa que si el controlador conectado es un Control (ES_MX)Xbox, el usuario ve los elementos de Xbox. Del mismo modo, si el dispositivo conectado es un Control (ES_MX)PlayStation, el usuario ve los elementos de PlayStation.
Parámetros
El Enum.KeyCode para el cual se recupera la imagen asociada.
Devuelve
El ID de imagen devuelta.
Muestras 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
Esta función返回一个 array de InputObjects 与 las teclas actualmente presionadas.
Este array se puede repetir para determinar qué teclas se están presionando actualmente, utilizando los valores de InputObject.KeyCode .
Para verificar si se está presionando una llave específica, use UserInputService:IsKeyDown() .
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
Un arreglo de InputObjects asociado con las teclas actualmente presionadas.
Muestras 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
Esta función返回 "enum.userinputtype" asociado con la entrada más reciente del usuario.
Por ejemplo, si el usuario ingresó anteriormente la barra espaciadora, el Enum.UserInputType devueltos serían 'Teclado' .
El evento UserInputService.LastInputTypeChanged se puede usar para rastrear cuando el último Enum.UserInputType usado por el usuario cambia.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
El Enum.UserInputType asociado con la entrada más reciente del usuario.
Muestras 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
Esta función devuelve un arreglo de InputObjects que coincide con los botones de ratón actualmente presionados.
Los botones de mouse que son rastreados por esta función incluyen:
<tr><td>Botón de ratón</td><td>El botón izquierdo del ratón.</td></tr><tr><td>Botón de ratón 2</td><td>El botón derecho del ratón.</td></tr><tr><td>Botón de ratón 3</td><td>El botón del ratón medio.</td></tr>
Nombre | Descripción |
---|
Si el usuario no está presionando ningún botón de mouse cuando se llama la función,返回一个空的 matriz/lista.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
Un arreglo de InputObjects que coincide con los botones de ratón actualmente apretados.
Muestras 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
Esta función devuelve el cambio, en píxeles, de la posición del jugador en el último marco de renderizado como un Mouse . Esta función solo funciona si el mouse ha sido bloqueado usando la propiedad Vector2 . Si el mouse no ha sido bloqueado, los valores de UserInputService.MouseBehavior devueltos serán
La sensibilidad del ratón, determinada en la configuración del cliente y UserInputService.MouseDeltaSensitivity, influirá en el resultado.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
Cambia en el movimiento del ratón.
Muestras 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
Esta función返回一个 Vector2 representando la ubicación de pantalla actual del jugador's Mouse en píxeles relativo al rincón superior izquierdo. Esto no cuenta con el inserto GUI .
Si la ubicación del puntero del mouse está fuera de la pantalla o el dispositivo del jugador no tiene un ratón, el valor devuelto se determinará.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Devuelve
Muestras 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
Esta función返回一个游戏手柄的阵列 UserInputTypes que están conectados y habilitados para la navegación de GUI. Esta lista está en orden descendente de prioridad, lo que significa que se puede repetir para determinar qué gamepad debe tener control de navegación.
Si una plataforma de juegos conectada es un controlador de juegos de navegación, solo determina qué controlador para juego(es) controla las interfaces gráficas de usuario de navegación. Esto no afecta a los controles de navegación.
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Véase también:
- UserInputService:SetNavigationGamepad() , para habilitar o deshabilitar un gamepad para la navegación de GUI
- UserInputService:IsNavigationGamepad() , para verificar si se habilita un gamepad para la navegación de GUI
- UserInputService:GetConnectedGamepads() , para devolver todos los gamepads conectados sin importar el control de navegación GUI
Devuelve
Un arreglo de UserInputTypes que se puede usar para la navegación de GUI, en orden descendente de prioridad.
GetStringForKeyCode
GetStringForKeyCode 返回一个代表键用户应该按下以输入指定 Enum.KeyCode 的字符串,并且考虑其键盘布局。 对于键代码 que requieren algunos modificadores para ser mantenidos,此函数将返回键以在键盘上按下,而不是在 modifier 上。请参阅下面的示例以获得更多说明。
Al usar Roblox con un diseño de teclado no QWERTY, los códigos de las teclas se mapearon a posiciones QWERTY equivalentes. Por ejemplo, presionar A
local UserInputService = game:GetService("UserInputService")local textLabel = script.Parentlocal mapKey = Enum.KeyCode.MtextLabel.Text = "Press " .. UserInputService:GetStringForKeyCode(mapKey) .. " to open the map"
Ejemplos en el teclado QWERTY
<tbody><tr><td><code>Ctrl.KeyCode.Q</code></td><td><code>P</code></td></tr><tr><td><code>Ctrl.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> está escrito con <kbd>Shift</kbd><kbd>2</kbd></td></tr></tbody>
Código de clave | Valor de devolución |
---|
Ejemplos en el teclado AZERTY
<tbody><tr><td><code>Ctrl.KeyCode.Q</code></td><td><code>Un</code></td></tr><tr><td><code>Ctrl.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 de clave | Valor de devolución |
---|
Uso de Gamepad
GetStringForKeyCode() devuelve la conversión de cadenas para el Enum.KeyCode para el controlador para juegoconectado más recientemente. Si el controlador no es compatible, la función devuelve la conversión de cadenas predeterminada para el código de solicitud.
El siguiente ejemplo muestra cómo puede mapear 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
Mapas de Gamepad
Los códigos de la placa de dirección no tienen ninguna diferencia según el dispositivo. Enum.KeyCode.ButtonSelect tiene un comportamiento ligeramente diferente en algunos casos. Usa ambos códigos de mapa de PlayStation para asegurarte de que los usuarios vean los botones correctos.
<tbody><tr><td><code>Enum.KeyCode.ButtonA</code></td><td><code>Interfaz de usuario cruzada</code></td><td><code>BotónA</code></td></tr><tr><td><code>Botón de código de lista de controles</code></td><td><code>Círculo de Botón</code></td><td><code>BotónB</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonX</code></td><td><code>Botón Cuadrado</code></td><td><code>BotónX</code></td></tr><tr><td><code>Enum.KeyCode.ButtonY</code></td><td><code>Triángulo de botón</code></td><td><code>BotónY</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonL1</code></td><td><code>BotónL1</code></td><td><code>BotónLB</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonL2</code></td><td><code>BotónL2</code></td><td><code>BotónLT</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonL3</code></td><td><code>BotónL3</code></td><td><code>Botón LS</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonR1</code></td><td><code>Botón R1</code></td><td><code>Botón RB</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonR2</code></td><td><code>BotónR2</code></td><td><code>BotónRT</code></td></tr><tr><td><code>Ctrl.KeyCode.ButtonR3</code></td><td><code>BotónR3</code></td><td><code>Botón RS</code></td></tr><tr><td><code>Entrada de código de biblioteca</code></td><td><code>Opciones de Botón</code></td><td><code>Inicio de botón</code></td></tr><tr><td><code>Botón de selección de código de idioma</code></td><td><code>Botón de toque de la consola</code> y <code>Compartir botón</code></td><td><code>BotónSeleccionar</code></td></tr></tbody>
Código de clave | Valor de PlayStation de regreso | Valor de devolución de Xbox |
---|
Imágenes del sistema para KeyCodes
Cuando se utiliza un Enum.KeyCode que se puede representar mejor como una imagen, como para un ImageLabel en una interfaz de usuario, puede usar los siguientes iconos de legado. Sin embargo, se recomienda que use GetImageForKeyCode() como un método más moderno y de cross-platform para recuperar los icon
<tbody><tr><td><code>Ctrl.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>Botón de código de lista de controles</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 de Cupón de Clave de Derecho de Autor</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 de Cupón de Clave de Derecho</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枚o.KeyCode.DPadUp</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>PadDown de Cupón de Clave de Enumeración</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>Botón de selección de código de idioma</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>Entrada de código de biblioteca</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>Ctrl.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>Ctrl.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>Ctrl.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>Ctrl.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>Ctrl.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>Ctrl.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>Ctrl.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>CtrlIzquierdo.Code.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>Ctrl.Shift.DerechoShift</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.Tabla de claves.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>Ctrl.Comma.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>Ensamblador.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.Periodo</code></td><td><img src="../../../assets/scripting/controls/period.png" width="24"></img></td><td><code>rbxasset://textures/ui/Controls/ перио.png</code></td></tr><tr><td><code>Espacio de código de lista de valores</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 de clave | Imagen | ID de activo |
---|
Parámetros
Devuelve
GetSupportedGamepadKeyCodes
Esta función devuelve un arreglo de KeyCodes que el gamepad asociado con el dado Enum.UserInputType soporta.
Esta función se puede usar para determinar qué KeyCodes se admiten y no se admiten por un controlador para juegoconectado. Para determinar si un código de clave específico se admite, usa UserInputService:GamepadSupports() .
Si se llama a un controlador para juegono existente, o no conectado, esta función devolverá un arreglo matriz/lista.
Como UserInputService es solo del lado del cliente, esta función solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juego.
Devuelve
Muestras 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
Esta función comprueba si se ha presionado un botón en un particular controlador para juego. Es devuelto true si el gamepad tiene el botón de prensado especificado button presionado, de lo contrario devuelve falso.
Tipos de entrada de usuario válidos
El controlador de juegos especificado debería ser uno de los siguientes valores de UserInputType:
<tr><td>Tipo de entrada de usuario.Gamepad1-8</td></tr>
Nombre |
---|
Códigos de clave válidos
El botón especificado debe ser uno de los siguientes valores de la lista de claves:
<tr><td>ButtonX de código de lista</td></tr><tr><td>Buttono de código de enlace</td></tr><tr><td>ButtonA de código de lista</td></tr><tr><td>Botón de código de enlace</td></tr><tr><td>Buttono de código de enlace</td></tr><tr><td>Buttono de código de enlace</td></tr><tr><td>Buttono de código de enlace de la interfaz de usuario.</td></tr><tr><td>Buttono de código de enlace</td></tr><tr><td>Buttono de código de enlace</td></tr><tr><td>Botón de código de lista</td></tr><tr><td>Inicio de código de botón de la interfaz de usuario</td></tr><tr><td>Botón de selección de código de enlace</td></tr><tr><td>PadLeft.Código de clave</td></tr><tr><td>Pad derecho del código de clave</td></tr><tr><td>Pad de código de dirección</td></tr><tr><td>PadDown</td></tr>
Nombre |
---|
Esto se puede usar para ver si un botón específico, como A, se está sosteniendo. Por ejemplo:
local UserInputService = game:GetService("UserInputService")local button = Enum.KeyCode.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Véase también:
- UserInputService:IsKeyDown() - Método similar con un uso diferente: Para ver si se presiona un dado key en un keyboard diferente.
Parámetros
El Enum.UserInputType del controlador de juegos dado.
El Enum.KeyCode del botón especificado.
Devuelve
Si el botón de gamepad especificado en el gamepad dado se presiona.
Muestras 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
Esta función返回 si el usuario está sosteniendo la llave asociada con el dado Enum.KeyCode .返回 true si la llave especificada se presiona o false si no se presiona.
Esto se puede usar para verificar si se está presionando una claveespecífica, como la barra espaciadora. Por ejemplo:
local UserInputService = game:GetService("UserInputService")local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)
Para recuperar una lista de todas las teclas presionadas por el usuario, usa la función UserInputService:GetKeysPressed() .
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Véase también:
- Enum.UserInputType.IsGamepadButtonDown - Un evento similar con un uso diferente: Para ver si se ha presionado un button en un gamepad dado.
Parámetros
El Enum.KeyCode de la clave.
Devuelve
Si la llave especificada está siendo mantenida presionada.
Muestras 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
Esta función toma un botón de mouse Enum.UserInputType y devuelve un valor deBooleano que indica si está presionado actualmente.
El botón de ratón verificado depende del valor Enum.UserInputType pasado a la función como argumento. Por ejemplo:
local UserInputService = game:GetService("UserInputService")local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript ".
Parámetros
El Enum.UserInputType del botón del ratón.
Devuelve
Si el botón de mouse que se da está actualmente apretado.
Muestras 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
Esta función true si el controlador de juego Enum.UserInputType especificado es permitido controlar la navegación y la selección GUIs .
Si quieres establecer un controlador para juegode navegación, puedes usar UserInputService:SetNavigationGamepad() . También puedes usar UserInputService:GetNavigationGamepads() para obtener una lista de todos los gamepads de navegación.
Por ejemplo, el código a continuación comprueba si el gamepad1 es como un controlador para juegode navegación:
local UserInputService = game:GetService("UserInputService")if UserInputService:IsNavigationGamepad(UserInputType.Gamepad1) thenprint("Gamepad is a navigation gamepad!")elseprint("Gamepad is not a navigation gamepad!")end
Se puede recuperar una lista de todos los gamepads conectados, independientemente de la navegación usando`UserInput/GetConnectedGamepads.
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juegoespecificado.
Devuelve
Si la plataforma de juego especificada es una plataforma de juego de navegación.
RecenterUserHeadCFrame
Esta función centra el CFrame de la VR headset al orientación actual del headset usado por el usuario. Esto significa que la orientación actual del visorse establece en CFrame.new() .
Usa esta función para mover el CFrame de la cabeza al centro de la zona de juego si parece estar en un desplazamiento.
Esto se comporta idénticamente a la función VRService, VRService:RecenterUserHeadCFrame().
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Devuelve
Muestras de código
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
La función SetNavigationGamepad establece si el gamepad especificado Enum.UserInputType puede mover el navegador de GUI. Un gamepad que está permitido para mover el navegador de GUI se considera un gamepad de navegación .
Si el argumento habilitado se pasa como true, el Gamepad puede mover el navegador de GUI. Si el argumento es false, el Gamepad no puede mover el navegador de GUI.
Si desea verificar si un Gamepad especificado es un set para ser un controlador para juegode navegación, puede usar la función UserInputService:IsNavigationGamepad(). También puede usar la función UserInputService:GetNavigationGamepads() para recuperar una lista de todos los Gamepads de navegación.
Dado que <Class.UserInputService> solo es client-side, esta función solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juegoespecificado.
Si la consola de juegos especificada puede mover el navegador de GUI.
Devuelve
Muestras de código
local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)
Eventos
DeviceAccelerationChanged
El evento DeviceAccelerationChanged se activa cuando un usuario se mueve un dispositivo que tiene un acelerómetro.
Un acelerómetro es un componente que se encuentra en la mayoría de los dispositivos móviles que mide la aceleración (cambio de velocidad).
Para determinar si el dispositivo de un usuario tiene un acelerómetro habilitado, see UserInputService.AccelerometerEnabled .
Este evento se puede usar para rastrear el movimiento de un dispositivo que tiene un acelerómetro. Un uso de ejemplo implica mover al personaje del jugador cuando un dispositivo móvil acelera.
Además, este evento se puede utilizar junto con UserInputService:GetDeviceAcceleration() para determinar el movimiento actual de un dispositivo del usuario si el dispositivo tiene un acelerómetro.
Este evento solo se activa localmente, lo que significa que solo el jugador cuyo dispositivo se mueve puede usar el evento y solo funcionará en un LocalScript .
Parámetros
Un InputObject , con un UserInputType de Accelerómetro y 2>Class.InputObject.Position|Position2> que muestra la fuerza de gravedad en cada eje local.
Muestras 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
El evento UserInputService.DeviceGravityChanged activa cuando la gravedad del dispositivo Vector3 cambia en un dispositivo que tiene un acelerómetro.
El vector de gravedad de un dispositivo representa la fuerza de la gravedad en cada uno de los ejes X, Y y Z del dispositivo. Mientras que la gravedad nunca cambia, la fuerza que ejerce en cada eje cambia cuando el dispositivo gira y cambia la orientación. El valor de fuerza que se ejerce en cada eje es un vehículo de unidad que va desde -1 a 1.
Un acelerómetro es un componente que se encuentra en la mayoría de los dispositivos móviles que mide la aceleración (cambio de velocidad).
Este evento se puede usar para determinar la dirección del mundo real de la fuerza de gravedad en el dispositivo del usuario. Esto incluso se puede usar para simular la fuerza de gravedad en el dispositivo del usuario dentro del juego, como en los objetos del juego (ver ejemplo a continuación).
Para ver si el dispositivo de un usuario tiene un acelerómetro habilitado, see UserInputService.AccelerometerEnabled . Si el dispositivo tiene un acelerómetro habilitado, puede usar la función UserInputService:GetDeviceGravity() para obtener la fuerza de gravedad actual en el dispositivo del usuario.
Parámetros
Un InputObject, con una propiedad InputObject.Position que muestra la fuerza de la gravedad en cada eje local. Esta posición se puede utilizar como una dirección para determinar la dirección de la gravedad relativa a la dispositivo.
Muestras 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
El evento DeviceRotationChanged se activa cuando un usuario gira un dispositivo que tiene un giroscopio.
Un giroscopio es un componente que se encuentra en la mayoría de los dispositivos móviles que detecta la orientación y la velocidad de rotación.
El evento es útil para rastrear la orientación del dispositivo y cómo cambia a medida que el usuario gira su dispositivo. Para determinar la actualización de la rotación del dispositivo, puede usar la función UserInputService:GetDeviceRotation().
Para ver si el dispositivo de un usuario tiene un giroscopio habilitado y que este evento se desencadenar, vea UserInputService.GyroscopeEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Parámetros
Un InputObject que proporciona información sobre la rotación del dispositivo. InputObject.Position representa el nuevo valor de rotación de un Vector3 y 1> Class.InputObj.Delta1> representa el cambio de rotación en un valor posicional de 4> Datatype.Vector34> posicional.
Muestras 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
El evento GamepadConnected se activa cuando se conecta un gamepad al cliente.
Dado que un juego de Roblox soporta múltiples controladores, este evento es útil cuando se empareja con el evento UserInputService.GamepadDisconnected para rastrear qué controladores / gamepads están activos. También puedes usar UserInputService:GetConnectedGamepads() para encontrar el controlador / gamepad correcto para usar.
El siguiente ejemplo muestra un ejemplo de uso de un seguimiento cuando se conecta un gamepad al cliente.
local UserInputService = game:GetService("UserInputService")
local function GamepadConnected(gamepad)
print("Player has plugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadConnected:Connect(GamepadConnected)
Si desea ver qué dispositivos están conectados, puede usar la función UserInputService:GetConnectedGamepads() .
Dado que este evento se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juegoconectado.
GamepadDisconnected
El evento GamepadDisconnected se activa cuando se desconecta un gamepad.
Dado que un juego de Roblox soporta múltiples controladores, este evento es útil cuando se empareja con el evento UserInputService.GamepadConnected para rastrear qué controladores / gamepads están activos. También puedes usar UserInputService:GetConnectedGamepads() para encontrar el controlador / gamepad correcto para usar.
El siguiente ejemplo muestra un ejemplo de uso de un seguimiento cuando se desconecta un gamepad del cliente.
local UserInputService = game:GetService("UserInputService")
local function GamepadDisconnected(gamepad)
print("Player has unplugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(GamepadDisconnected)
Dado que este evento se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
El Enum.UserInputType del controlador para juegodesconectado.
InputBegan
El evento Inicio de sesión de inicio se activa cuando un usuario comienza a interactuar a través de un dispositivo de interfaz humana-ordenador (botón de ratón, toque comienzo, botón de teclado, etc.).
Se puede usar para rastrear el comienzo de la interacción del usuario, como cuando un usuario interactúa con un elemento de GUI, una consola de juegos, etc. No captura el movimiento del mouse.
Este evento se puede utilizar junto con UserInputService.InputChanged y UserInputService.InputEnded para rastrear cuando comienza, cambia y termina la entrada del usuario.
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento cambiado de entrada se activa cuando un usuario cambia cómo interactúa a través de un dispositivo de interfaz humana-ordenador (botón de ratón, toque comienzo, botón de teclado, etc).
Para ignorar los eventos que se manejan automáticamente por Roblox, como el desplazamiento en un ScrollingFrame , compruebe si el argumento gameProcessingEvent es falso. Este evento se puede usar junto con UserInputService.InputBegan y 2> Class.UserInputService.InputEnded2> para rastrear cuando el usuario ingresa,
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento Terminado de entrada se activa cuando un usuario deja de interactuar a través de un dispositivo de interfaz humana-ordenador (botón de ratón, toque comienzo, botón de teclado, etc). Esto es útil cuando se rastrea cuando un usuario libera una clavedel teclado, botón del ratón, toque la pantalla, etc.
Este evento se puede utilizar junto con UserInputService.InputBegan y UserInputService.InputChanged para rastrear cuando comienza, cambia y termina la entrada del usuario.
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento UserInputService JumpRequest se activa cuando hay una solicitud de salto del cliente, por ejemplo, cuando el cliente presiona la barra espaciadora o el botón de salto en el móvil.
Este evento se activa cuando el usuario intenta hacer su salto de Player.Character . El comportamiento predeterminado responde a una solicitud de salto estableciendo la propiedad de salto del jugador a true, lo que hace que el personaje del jugador salte.
El evento se puede usar para rastrear cada vez que un jugador quiere saltar. En lugar de usarlo para hacer que un jugador salte, se debe usar para cambiar el comportamiento de salto predeterminado - como desactivar el salto.
Por ejemplo, el código a continuación imprime "Salto" cada vez que el jugador envía una solicitud de salto.
local UserInputService = game:GetService("UserInputService")
function onJumpRequest()
print("Jump!")
end
UserInputService.JumpRequest:Connect(onJumpRequest)
Dado que este evento se dispara varias veces para una sola solicitud de salto, se recomienda el uso de un debounce .
Si desea conectar teclas o botones a otras acciones, considere usar eventos como UserInputService:GetKeysPressed() y UserInputService.InputBegan o el ContextActionService .
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Muestras 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
El evento UserInputService.LastInputTypeChanged ocurre cada vez que el cliente cambia cómo están interactuando a través de un dispositivo de interfaz humana-ordenador. (i.e. desde MouseMovement a MouseWheel o desde Thumbstick1 a Thumbstick2).
Para obtener el valor de la última entrada, independientemente de si ha cambiado, puede usar la función UserInputService:GetLastInputType() .
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Parámetros
Un Enum.UserInputType que indica el último introducirde entrada.
Muestras 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
PointerAction se activa cuando el usuario realiza una acción de puntería específica. En particular, desplazando la rueda del mouse.
Parámetros
TextBoxFocusReleased
El evento TextBoxFocusRelease se activa cuando un cliente pierde el enfoque en un TextBox - generalmente cuando un cliente deja de ingresar el texto en un TextBox presionando Return o haciendo clic / tocando en cualquier otro lugar de la pantalla.
Por ejemplo, el código a continuación imprime el nombre de la TextBox que pierde enfoque cuando el evento se activa.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)
Puede usarse junto con UserInputService.TextBoxFocused para rastrear cuando un TextBox gana y pierde enfoque.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Muestras 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
El evento TextBoxFocused se activa cuando un ganancia se enfoca en un TextBox - generalmente cuando un cliente hace clic / toca en una caja de texto para comenzar a escribir texto. Esto también se activa si un enfoque de caja de texto se enfoca usando TextBox:CaptureFocus() .
Por ejemplo, el código a continuación imprime el nombre de la TextBox enfocada cuando se activa el evento.
local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)
Puede usarse junto con UserInputService.FocusReleased para rastrear cuando una caja de texto gana y pierde enfoque.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Muestras 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
El evento TouchEnded se activa cuando un usuario suelta su dedo de la pantalla de un dispositivo TouchEnabled, terminando la entrada táctil con el dispositivo.
Este evento se puede usar para determinar cuando un usuario deja de tocar la pantalla de su dispositivo. Puede ser combinado con UserInputService.TouchStarted para determinar cuando un usuario comienza y termina tocando la pantalla.
Por ejemplo, el código a continuación imprime la posición de la pantalla donde el usuario deja de tocar la pantalla.
local UserInputService = game:GetService("UserInputService")
function TouchEnded(touch, gameProcessedEvent)
print("Touch ended at " .. tostring(touch.Position))
end
UserInputService.TouchEnded:Connect(TouchEnded)
El objeto de entrada táctil es el mismo objeto de entrada a lo largo de toda la vida del toque. Así que comparar InputObjects cuando son objetos táctiles es válido para determinar si es el mismo dedo.
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
Se activa cuando un usuario sostiene al menos un dedo por un corto período de tiempo en la misma posición de pantalla de un dispositivo TouchEnabled.
Este evento se puede usar para determinar cuando un usuario mantiene su dedo hacia abajo en un GUI o elemento.
El ejemplo a continuación imprime el state de la presión larga cuando el usuario sostiene al menos un dedo por un corto período de tiempo en la misma posición de la pantalla. Los estados posibles incluyen: Comenzar , Cambiar , 1> Finalizar 1> , 4> Cancelar 4> y 7> Ninguno7> .
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 comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, vea UserInputService.TouchEnabled .
Puede ser emparejado con UserInputService.TouchStarted y UserInputService.TouchEnded para determinar cuándo un usuario comienza y termina tocando la pantalla.
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Un arreglo de Vector2 objetos, que indica la posición de los dedos implicados en el gesto.
El Enum.UserInputState del gesto.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchMoved se activa cuando un usuario mueve su dedo en un dispositivo habilitado para tocar.
Este evento se puede usar para determinar cuando un usuario mueve su dedo mientras toca la pantalla de un dispositivo habilitado para tocar. Puede ser útil rastrear si un usuario está moviendo su dedo en la pantalla, así como dónde está moviendo su dedo.
El código a continuación imprime "Touch moved from" la posición anterior de Vector2 "a" la nueva posición de Vector2 de la mano del usuario en un 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)
Puede ser emparejado con UserInputService.TouchStarted y UserInputService.TouchEnded para determinar cuándo un usuario comienza a tocar la pantalla, cómo se mueve su dedo mientras la toca y cuándo deja de tocar la pantalla.
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchPan se activa cuando un usuario arrastra al menos un dedo en un dispositivo TouchEnabled .
Este evento se puede usar para determinar cuando un usuario mueve su dedo a lo largo de la pantalla de un dispositivo de toque habilitado - como para rotar el Camera en un guión de cámara script.
El fragmento de abajo imprime "Velocidad de arrastre del toque" seguido por la velocidad del toque del usuario cuando el usuario arrastra su dedo en la pantalla.
local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPan:Connect(function(touchPositions, totalTranslation, velocity, state, gameProcessedEvent)
print("Speed of touch drag: " .. tostring(velocity))
end)
Echa un vistazo a otra útil función de UserInputService aquí UserInputService.TouchRotate .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Un arreglo de Vector2 objetos, que indica las posiciones de los toques (por ejemplo, dedos) implicados en el gesto.
El tamaño del gesto de la sartén desde el principio hasta el final (en píxeles).
La velocidad del gesto de la cazuela (en píxeles) por segundo.
El Enum.UserInputState del gesto.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
Se activa cuando un usuario coloca y mueve dos dedos en la pantalla de un dispositivo TouchEnabled .
Por instancia, el siguiente fragmento de código muestra cuánto ha cambiado el escalado de enfoque de la cámara desde el principio del 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 comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en enfoque. Por ejemplo, los ingresos no se capturarán cuando la ventana esté minimizada. Como este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Un array de Vector2s , que indica la posición de la pantalla, en píxeles, de los dedos implicados en el gesto de pinch.
La magnitud de la pinza desde el principio hasta el final (en píxeles) dividida por las posiciones de la pinza de inicio.
La velocidad del gesto de pinch (en píxeles) por segundo.
El Enum.UserInputState del gesto.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchRotate se activa cuando un usuario gira dos dedos en un dispositivo TouchEnabled .
Por ejemplo, el siguiente código imprime cuánto la cámara ha girado desde el comienzo de la rotación táctil.
local UserInputService = game:GetService("UserInputService")
UserInputService.TouchRotate:Connect(function(touchPositions, rotation, velocity, state, gameProcessedEvent)
print("Camera has rotated " .. tostring(rotation) .. " degrees!")
end)
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Los scripts principales que controlan la cámara del usuario en un dispositivo móvil usan código que funciona similarmente a este evento. La mejor práctica para este evento es usarlo al crear un sistema de cámara móvil para sobrescribir los scripts principales predeterminados.
Véase también:
Parámetros
Un arreglo de Vector2s , que indica las posiciones de los dedos implicados en el gesto.
El número de grado que ha girado el gesto desde el comienzo del gesto.
El cambio en la rotación (en grados) dividido por la duración del cambio (en segundos).
El Enum.UserInputState del gesto.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchStarted se activa cuando un usuario coloca su dedo en un dispositivo TouchEnabled , comenzando la entrada de touch con el dispositivo.
Este evento se puede usar para determinar cuando un usuario comienza a tocar la pantalla de su dispositivo. Se puede emparejar con UserInputService.TouchEnded para determinar cuando un usuario comienza y termina tocando la pantalla.
El objeto de entrada táctil es el mismo objeto de entrada a lo largo de toda la vida del toque. Así que comparar InputObjects cuando son objetos táctiles es válido para determinar si es el mismo dedo.
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Una instancia de InputObject que contiene información sobre la entrada del usuario.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchSwipe se activa cuando un usuario toca con los dedos en un dispositivo TouchEnabled .
Este evento se puede usar para determinar cuando un usuario desplaza sus dedos en la pantalla de su dispositivo y la dirección en la que desplazó el usuario.
Para un seguimiento más preciso del movimiento de la entrada táctil, usa usando UserInputService.TouchMoved
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Un Enum.SwipeDirection, que indica la dirección en la que el usuario ha desplazado.
Número de toques (por ejemplo, dedos) implicados en el gesto.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchTap se activa cuando el usuario toca / toca su dedo en la pantalla en un dispositivo TouchEnabled .
Este evento se activará independientemente de si el usuario toca / toca el mundo del juego o un elemento de GUI. Si estás buscando un evento que solo se activa cuando el usuario toca / toca el mundo del juego, usa UserInputService.TouchTapInWorld .
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Parámetros
Un arreglo de Vector2 objetos, que indica la posición de los dedos implicados en el gesto de toque.
Indica si el motor del juego observó internamente esta entrada y actuó sobre ella. Generalmente, esto se refiere a la capacidad de procesamiento de la interfaz de usuario, por lo que si se tocó o hizo clic en un botón desde esta entrada, gameProcessedEvent sería true . Esto también es cierto para los eventos de entrada conectados a través de ContextActionService .
Muestras 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
El evento TouchTapInWorld se activa cuando el usuario toca / toca su dedo en la pantalla en un dispositivo TouchEnabled . Se activa cuando el usuario toca en el mundo del juego.
Este evento se puede usar para determinar cuando un usuario toca la pantalla y no toca un elemento GUI . Si el usuario toca un elemento de GUI, UserInputService.TouchTap se ejecutará en lugar de TouchTapInWorld.
Para comprobar si el dispositivo de un usuario está TouchEnabled y que los eventos de toque se desencadenar, consulte UserInputService.TouchEnabled .
Este evento solo se activa cuando la ventana del cliente de Roblox esté en el enfoque. Por ejemplo, no se capturarán los elementos cuando la ventana esté minimizada.
Dado que solo se ejecuta localmente, solo se puede usar en un LocalScript .
Véase también:
Parámetros
Si el usuario tocó un elemento de la GUI.
Muestras 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
El evento UserInputService WindowFocusRelease cuando la ventana del cliente Roblox pierde el enfoque - generalmente cuando el cliente Roblox está minimizado por el usuario.
Por ejemplo, el código a continuación imprime "Window focus released" cuando el cliente Roblox pierde el enfoque.
local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocusReleased:Connect(function()
print("Window focus released")
end)
Este evento se puede utilizar junto con UserInputService.WindowFocused para rastrear si el cliente Roblox está activamente enfocado en la pantalla del usuario.
Dado que solo se ejecuta localmente, solo se puede usar en un LocalScript .
Muestras 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
El evento UserInputService WindowFocused se activa cuando la ventana del cliente Roblox gana enfoque - generalmente cuando el cliente Roblox está maximizado/abiertamente abierto en la pantalla del usuario.
Por ejemplo, el código a continuación imprime "Ventana enfocada" cuando el cliente Roblox gana enfoque.
local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)
Este evento se puede utilizar junto con UserInputService.WindowFocusReleased para rastrear si el cliente Roblox está activamente enfocado en la pantalla del usuario.
Dado que este evento solo se activa localmente, solo se puede usar en un LocalScript .
Muestras 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)