UserInputService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst
Nicht repliziert

UserInputService ist ein Dienst, der die verschiedenen Arten von Eingaben, die auf einem Gerätverfügbar sind, erkennt und aufzeichnet.

Der primäre Zweck dieses Dienstes ist es, Erfahrungen mit mehreren Formen der verfügbaren Eingaben zu kooperieren, z. B. Gamepads, Touch-Bildschirme und Tastaturen. Es ermöglicht ein LocalScript , um verschiedene Aktionen abhängig von dem Gerät auszuführen und, im Gegenzug, den besten Erlebnis für den Endbenutzer zu bieten.

Einige Verwendungszwecke dieses Dienstes umfassen das Erkennen der Benutzeroberfläche, wenn sie mit GUIs, Werkzeugen und anderen Spielinstanzen interagieren. Um die Benutzeroberfläche zu erkennen, muss der Dienst ein Service-Ereignis suchen. Zum Beispiel kann der Dienst ein Ereignis wie das Berühren des Bildschirms eines mobilen Geräts mit dem

Da dieser Dienst nur auf der Client-Seite funktioniert, wird er nur funktionieren, wenn er in einem LocalScript oder einem ModuleScript verwendet wird, der von einem LocalScript benötigt wird. Als UserInputService ist die Client-Seite nur für Benutzer im Spiel sichtbar, die nur ihre eigene Eingabe - und nicht die Eingabe von anderen - erkennen können.

Siehe auch ContextActionService, einen Dienst, der es Ihnen ermöglicht, Funktionen an mehrere Benutzer-Eingaben zu binden.

Code-Beispiele

UserInputService

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

Zusammenfassung

Eigenschaften

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das Gerät des Benutzers ein Beschleunigungsmesser hat.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das verwendete Gerät ein verfügbares Gamepad hat.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das Gerät des Benutzers ein Gyroskop hat.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das Gerät des Benutzers eine Tastatur hat.

  • Bestimmt, ob die Maus des Benutzers frei bewegt oder gesperrt werden kann.

  • Nicht repliziert
    Parallel lesen

    Skaliert die Ausgabe des Delta (Änderung) des Benutzers Mouse .

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das Gerät des Benutzers eine Maus verfügbar hat.

  • MouseIcon:ContentId
    Parallel lesen

    Die Bild-ID, die als Benutzer-Maus-Symbol verwendet wird.

  • Parallel lesen

    Bestimmt, ob das Mouse-Symbol sichtbar ist.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Bestimmt die Position der Tastatur auf dem Bildschirm.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Bestimmt die Größe der Tastatur auf dem Bildschirm.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob eine On-screen-Tastatur auf dem Bildschirm des Benutzers momentan sichtbar ist.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt, ob das aktuelle Gerät des Benutzers einen Touch-Bildschirm hat.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Zeigt an, ob der Benutzer eine virtuelle Realität-Headset verwendet.

Methoden

Ereignisse

Eigenschaften

AccelerometerEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaftsbild beschreibt, ob das Gerät des Benutzers ein Beschleunigungsmesser hat

Ein Beschleunigungsmesser ist ein Komponente, das in den meisten mobilen Geräten gefunden wird, die Beschleunigung (Geschwindigkeit ändern) misst.

Das folgende Code-Beispiel zeigt, wie man prüfen kann, ob das Gerät des Benutzers einen Beschleunigungsmesser hat.


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

Wenn das Gerät ein aktiviertes Beschleunigungsmesser hat, können Sie seine aktuelle Beschleunigung erhalten, indem Sie die Funktion UserInputService:GetDeviceAcceleration() verwenden oder die Schiene verfolgen, wenn die Beschleunigung des Geräts durch die Verwendung des Ereignisses UserInputService.DeviceAccelerationChanged ändert.

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Code-Beispiele

Move a Ball using the Accelerometer

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
Create a Gyroscopic Camera

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

GamepadEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaftsbeschreibung beschreibt, ob das verwendete Gerät von einem Benutzer ein verfügbares Gamepad hat. Wenn Gamepads verfügbar sind, kannst du UserInputService:GetConnectedGamepads() verwenden, um eine Liste von verbundenen Gamepads zu erlangen.

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Siehe auch:

Code-Beispiele

How to Set the Active Gamepad for Input

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

GyroscopeEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Diese Eigenschaft beschreibt, ob das Gerät des Benutzers ein Gyroskop hat.

Ein Gyroskop ist ein Komponente, das in den meisten mobilen Geräten gefunden wird, die die Ausrichtung und die Rotationsgeschwindigkeit erkennen.

Wenn das Gerät eines Benutzers ein Gyroskop hat, können Sie es in Ihrem Spiel verwenden, indem Sie die Funktion UserInputService:GetDeviceRotation() und das Ereignis UserInputService.DeviceRotationChanged verwenden.


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

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Code-Beispiele

Create a Gyroscopic Camera

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

KeyboardEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaft beschreibt, ob das Gerät des Benutzers eine Tastatur hat. Diese Eigenschaft ist true , wenn das Gerät des Benutzers eine Tastatur hat, und false , wenn es nicht hat.

Es kann verwendet werden, um zu bestimmen, ob der Benutzer eine verfügbare Tastatur hat - was wichtig sein kann, wenn Sie überprüfen möchten, ob Sie UserInputService:IsKeyDown() oder UserInputService:GetKeysPressed() verwenden können, um nach der Tastatur-Eingabe zu überprüfen.

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Code-Beispiele

Check if Keyboard is Enabled

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

MouseBehavior

Parallel lesen

Diese Eigenschaft legt fest, wie die Maus des Benutzers auf der Grundlage von Enum.MouseBehavior Enum.MouseBehavior INGSVERZEICHNIS. Der Standardwert ist Enum.MouseBehavior.Default.

Es kann auf drei Werte eingestellt werden:

  1. Standard : Die Maus bewegt sich frei auf dem Bildschirm des Benutzers.
  2. LockCenter : Die Maus ist gesperrt und kann nicht von, dem Zentrum des Benutzers Bildschirms, bewegt werden.
  3. LockCurrentPosition : Die Maus ist gesperrt, und kann nicht von移动, es ist当前位置在用户的屏幕上,在锁定时间.

Der Wert dieser Eigenschaft beeinflusst nicht die Sensibilität der Ereignisverfolgung der Maus. Zum Beispiel gibt GetMouseDelta die gleiche Datatype.Vector2 -Schaltfläche in Pixel zurück, unabhängig davon, ob die Maus gesperrt ist oder frei umhergehen kann. Ergebnissind Standard-Skripte wie diejenigen, die die Kamera steuern,

Diese Eigenschaft wird überschrieben, wenn ein GuiButton mit Modal aktiviert ist, und der Spieler:innicht den Rechten-Maus-Button ist nicht aktiviert.

Beachten Sie, dass, wenn die Maus gesperrt ist, UserInputService.InputChanged immer noch ausgeführt wird, wenn der Spieler die Maus bewegt und in den Delta eintreten wird, in dem die Maus versucht, sich zu bewegen. Darüber hinaus, wenn der Spieler aus dem Spiel geworfen wird, wird die Maus gezwungen aufgelockt.

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Code-Beispiele

Create a Binoculars Script

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
Create a Custom CameraScript

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

MouseDeltaSensitivity

Nicht repliziert
Parallel lesen

Diese Eigenschaft bestimmt die Empfindlichkeit der Benutzeroberfläche Mouse.

Die Empfindlichkeit bestimmt die Ausmaß, in dem ein Bewegung der physischen Maus in ein Bewegung der Maus im Spiel übersetzt wird. Dies kann verwendet werden, um anzupassen, wie empfindlich Ereignis-Tracking-Maus-Bewegung, wie GetMouseDelta , sind.

Diese Eigenschaft betrifft nicht die Bewegung des Maus-Symbols. Nor does it affect the Kamerasensibilität setting found in the Einstellungen tab of the client's Einstellungen menu, which also adjusts the sensitivity of events tracking mouse movement.

Dieses Eigenschaft hat einen maximalen Wert von 10 und einen minimalen Wert von 0. Ein niedrigerer Wert entspricht einer niedrigeren Empfindlichkeit und ein höherer Wert einer höheren Empfindlichkeit.

Wenn die Sensibilität 0 ist, werden Ereignisse, die die Bewegung des Mauszeigers verfolgen, immer noch ausgeführt, aber alle Optionen und Eigenschaften, die die Änderung der Mausposition anzeigen, werden zurückgegeben, Vector2.new() oder Vector3.new()

Code-Beispiele

Create a Binoculars Script

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end

MouseEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaft beschreibt, ob das Gerät des Benutzers eine Maus verfügbar hat. Dieses Eigenschaft ist true , wenn das Gerät des Benutzers eine verfügbare Maus hat, und false , wenn es nicht hat.


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

Es ist wichtig, dies zu überprüfen, bevor Sie UserInputService Mausfunktionen wie UserInputService:GetMouseLocation() verwenden.

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Siehe auch:

Code-Beispiele

Create a Binoculars Script

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end

MouseIcon

ContentId
Parallel lesen

Die MouseIcon -Eigenschaft bestimmt das Bild, das als Pfeil verwendet wird. Wenn leer, wird eine Standardpfeil verwendet. Während der Cursor über bestimmte UI-Objekte wie einen ImageButton , TextButton , 1> Class.Loaded1> oder 4> Class.ProximityPrompt4> gerät,

Um den Cursor vollständig auszublenden, verwenden Sie nicht ein transparennes Bild. Stattdessen setzen Sie UserInputService.MouseIconEnabled auf false.

Code-Beispiele

UserInputService.MouseIcon

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

MouseIconEnabled

Parallel lesen

Dieses Eigenschaft bestimmt, ob das Mouse -Symbol sichtbar ist, wenn true das Symbol des Mauses sichtbar ist, wenn false es nicht ist.

Zum Beispiel versteckt das Code-Snippet unten das Symbol der Maus.


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

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Code-Beispiele

Hide Mouse During Keyboard Input

local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)

OnScreenKeyboardPosition

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaftsbeschreiben die Position der Tastatur auf dem Bildschirm in Pixel. Die Tastatur position ist Vector2.new(0, 0) wenn sie nicht sichtbar ist.

Da UserInputService nur clientseitig ist, kann diese Eigenschaft nur in einem LocalScript oder einem Script mit 1> Class.BaseScript.RunContext|RunContext1> auf 14> Enums.RunContext.Client4> verwendet werden.

Siehe auch OnScreenKeyboardVisible und OnScreenKeyboardSize.

Code-Beispiele

UserInputService.OnScreenKeyboardPosition

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

OnScreenKeyboardSize

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaftsbeschreiben die Größe der Tastatur auf dem Bildschirm in Pixel. Die Tastaturgröße ist Vector2.new(0, 0) wenn sie nicht sichtbar ist.

Da UserInputService nur clientseitig ist, kann diese Eigenschaft nur in einem LocalScript oder einem Script mit 1> Class.BaseScript.RunContext|RunContext1> auf 14> Enums.RunContext.Client4> verwendet werden.

Siehe auch OnScreenKeyboardVisible und OnScreenKeyboardPosition.

OnScreenKeyboardVisible

Schreibgeschützt
Nicht repliziert
Parallel lesen

Dieses Eigenschaftsbild beschreibt, ob eine On-Screen-Tastatur auf dem Bildschirm des Benutzers momentan sichtbar ist.

Da UserInputService nur clientseitig ist, kann diese Eigenschaft nur in einem LocalScript oder einem Script mit 1> Class.BaseScript.RunContext|RunContext1> auf 14> Enums.RunContext.Client4> verwendet werden.

Siehe auch OnScreenKeyboardSize und OnScreenKeyboardPosition.

TouchEnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Diese Eigenschaft beschreibt, ob das aktuelle Gerät des Benutzers einen Touch-Bildschirm hat.

Die Eigenschaft wird verwendet, um zu bestimmen, ob das Gerät des Benutzers einen Touch-Bildschirm hat, und daher ob Touch-Ereignisse initiierenwerden. Wenn TouchEnabled wahr ist, können Sie Benutzer-Eingabedienste verwenden, wie z. B. UserInputService.TouchStarted und UserInputService.TouchEnded, um zu verfolgen, wann ein Benutzer den Bildschirm seines Geräts berührt hat und aufge

Das unten stehende Code-Snippet druckt, ob das Gerät des Benutzers einen Touch-Bildschirm hat.


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

Siehe auch:

Code-Beispiele

Create a Custom CameraScript

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

VREnabled

Schreibgeschützt
Nicht repliziert
Parallel lesen

Diese Eigenschaft beschreibt, ob der Benutzer ein virtuelles Realität (VR) -Gerät verwendet.

Wenn ein VR-Gerät aktiviert ist, können Sie mit seiner Position und Bewegung interagieren, indem Sie Funktionen wie UserInputService:GetUserCFrame() verwenden. Sie können auch auf die Bewegung des VR-Geräts reagieren, indem Sie das Ereignis UserInputService.UserCFrameChanged verwenden.


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

Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.

Siehe auch:

Code-Beispiele

VR Head Tracking

local VRService = game:GetService("VRService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local function TrackHead(inputType, value)
if inputType == Enum.UserCFrame.Head then
head.CFrame = value
end
end
if VRService.VREnabled then
-- Set the initial CFrame
head.CFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
-- Track VR headset movement and mirror for character's head
VRService.UserCFrameChanged:Connect(TrackHead)
end

Methoden

GamepadSupports

Diese Funktion gibt zurück, ob die angegebene Enum.UserInputType Spielpad unterstützt eine Taste, die mit dem angegebenen Enum.KeyCode übereinstimmt. Diese Funktion wird verwendet, um gültige Gamepad-Eingaben zu bestimmen.

Um festzustellen, welche Enum.UserInputType Spielplattformen verbunden sind, verwenden Sie UserInputService:GetConnectedGamepads().

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Die Enum.UserInputType des Gamepad.

gamepadKeyCode: Enum.KeyCode

Der Enum.KeyCode des Buttons in der Frage.


Rückgaben

Ob die angegebene Gamepad-Taste mit dem angegebenen Enum.KeyCode kompatibel ist.

Code-Beispiele

Binding Functions to Gamepad Controls

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

GetConnectedGamepads

Diese Funktion gibt ein Array von Enum.UserInputType Spielpads zurück, die derzeit verbunden sind. Wenn keine Spielpads verbunden sind, wird dieses Array leer sein. Darüber hinaus gibt es nur Objekte für Spielpads zurück, nicht aber für Tastatur-Objekte. Zum Instanzwird dieses Ereignis ein연결tes Gamepad1-Objekt, aber nicht ein Tastatur-Objekt, zurückgeben.

Zum Beispiel ruft das folgende Code-Snippet die verbundenen Spielkonsolen ab und speichert sie in einer Variable namens connectedGamepads .


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

Um zu überprüfen, ob eine bestimmte Gamepad mit einem bestimmten Gamepad verbunden ist, verwenden Sie UserInputService:GetGamepadConnected() .

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:


Rückgaben

Ein Array von UserInputTypes mit den Spielpads, die mit dem Gerät des Benutzers verbunden sind.

Code-Beispiele

How to Set the Active Gamepad for Input

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

GetDeviceAcceleration

Die Funktion GetDeviceAcceleration bestimmt die aktuelle Beschleunigung des Benutzergeräts. Sie gibt ein InputObject zurück, das die aktuelle Beschleunigung des Geräts beschreibt.

Damit dies funktioniert, muss das Gerät des Benutzers ein aktiviertes Beschleunigungsmesser haben. Um zu überprüfen, ob das Gerät eines Benutzers ein aktiviertes Beschleunigungsmesser hat, können Sie die UserInputService.AccelerometerEnabled Eigenschaftenüberprüfen.

Wenn Sie stattdessen die Beschleunigung des Geräts des Benutzers verfolgen möchten, können Sie das Ereignis UserInputService.DeviceAccelerationChanged verwenden.

Da es nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.


Rückgaben

Code-Beispiele

Print Device Acceleration

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

GetDeviceGravity

Diese Funktion gibt ein InputObject zurück, das die aktuelle Vektorkraftdes Geräts beschreibt.

Der SchwerkraftVector wird durch die Ausrichtung des Geräts in Bezug auf die reale Schwerkraft fuer Gravitation bestimmt. Zum Instanz, wenn ein Gerät perfekt aufgerichtet ist (Hochformat), ist der SchwerkraftVector Vector3.new(0, 0, -9.18) . Wenn die linke Seite des Geräts

Diese Funktion kann verwendet werden, um das Gerät des Benutzers zu aktivieren, um die Schwerkraft im Spiel zu beeinflussen oder Objekte im Spiel zu bewegen, wie einen Ball.

Die Schwerkraft wird nur für Spieler verfolgt, die ein Gyroskop mit einem aktivierten Gyroskop-Sensor verwenden - wie ein mobiles Gerät.

Um zu überprüfen, ob das Gerät eines Benutzers ein aktiviertes Gyroskop hat, überprüfen Sie den Wert von UserInputService.GyroscopeEnabled . Wenn das Gerät ein aktiviertes Gyroskop hat, können Sie auch das Ereignis UserInputService.DeviceGravityChanged verwenden, um zu verfolgen, wenn die Kraft der Schwerkraft auf dem Gerät des Benutzers ändert sich.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Code-Beispiele

Moving Objects with the Gyroscope

local UserInputService = game:GetService("UserInputService")
local bubble = script.Parent:WaitForChild("Bubble")
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(0, 20, 0) * CFrame.Angles(-math.pi / 2, 0, 0)
if UserInputService.GyroscopeEnabled then
-- Bind event to when gyroscope detects change
UserInputService.DeviceGravityChanged:Connect(function(accel)
-- Move the bubble in the world based on the gyroscope data
bubble.Position = Vector3.new(-8 * accel.Position.X, 1.8, -8 * accel.Position.Z)
end)
end

GetDeviceRotation

Diese Funktion gibt ein InputObject und ein CFrame zurück, die die aktuelle Vektorkraftdes Geräts beschreiben.

Dies wird mit einem InputObject ausgeführt. Die Position-Eigenschaft des Eingabegozeugs ist ein Enum.InputType.Gyroscope, das die Gesamtdrehung in jedem lokalen Gerät-Achse verfolgt.

Die GeräteRotation kann nur auf Geräten mit einem gyroscope verfolgt werden.

Da diese Funktion lokal ausgeführt wird, kann sie nur in einem LocalScript verwendet werden.


Rückgaben

Ein Tupl, das zwei Eigenschaften enthält:

  1. Die Delta-Eigenschaft beschreibt die Menge der Rotation, die zuletzt stattfand
  2. Die CFrame ist die aktuelle Rotation des Geräts im Verhältnis zu seinem Standard-Referenzrahmen.

Code-Beispiele

Print Device Rotation

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

GetFocusedTextBox

Diese Funktion gibt die TextBox zurück, auf die der Client gerade fokussiert ist. Ein Textfeld kann manuell durch den Benutzer ausgewählt werden, oder die Auswahl kann durch die TextBox:CaptureFocus() Funktion gezwungen werden. Wenn kein Textfeld ausgewählt wird, gibt diese Funktion null zurück.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:


Rückgaben

Code-Beispiele

Ignore User Input When a TextBox Is Focused

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local jumpKey = Enum.KeyCode.J
local isJumping = false
local function InputBegan(input, _gameProcessedEvent)
local TextBoxFocused = UserInputService:GetFocusedTextBox()
-- Ignore input event if player is focusing on a TextBox
if TextBoxFocused then
return
end
-- Make player jump when user presses jumpKey Key on Keyboard
if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == jumpKey then
if not isJumping then
isJumping = true
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end
local function StateChanged(_oldState, newState)
-- Prevent player from jumping again using jumpKey if already jumping
if newState == Enum.HumanoidStateType.Jumping then
isJumping = true
-- Allow player to jump again after landing
elseif newState == Enum.HumanoidStateType.Landed then
isJumping = false
end
end
UserInputService.InputBegan:Connect(InputBegan)
humanoid.StateChanged:Connect(StateChanged)

GetGamepadConnected

Diese Funktion gibt zurück, ob eine Spielkonsole mit dem angegebenen Enum.UserInputType an den Client verbunden ist.

Dies kann verwendet werden, um zu überprüfen, ob ein bestimmter Gamepad, wie 'Gamepad1' mit dem Client-Gerät verbunden ist.

Um eine Liste aller verbundenen Gamepads abzurufen, verwenden Sie UserInputService:GetConnectedGamepads() .

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Die Enum.UserInputType des Spielspads in der Frage.


Rückgaben

Ob eine Spielkonsole mit Enum.UserInputType verbunden ist.

Code-Beispiele

Check Whether a Gamepad is Connected

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

GetGamepadState

Diese Funktion gibt ein Array von InputObjects für alle verfügbaren Eingaben auf dem gegebenen Enum.UserInputType Gamepad zurück, die den letzten Eingangszustand jedes Eingangs repräsentieren.

Um die UserInputTypes der verbundenen Gamepads zu finden, verwenden Sie UserInputService:GetConnectedGamepads().

Da diese Funktion nur lokal ausgeführt wird, kann sie nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Der Enum.UserInputType entspricht dem Spielpad in der Frage.


Rückgaben

Ein Array von InputObjects , das den aktuellen Zustand aller verfügbaren Eingaben für die angegebene Gamepad darstellt.

GetImageForKeyCode

ContentId

Diese Methode nimmt die angeforderte Enum.KeyCode und gibt das mit dem derzeit verbundenen Gamepad-Gerät verbundene Bild zurück (begrenzt auf Xbox, PlayStation und Windows). Dies bedeutet, dass, wenn der verbundene Controller ein Xbox-Controller ist, der Benutzer die Xbox-Assets sieht. Ähnlich, wenn der verbundene Gerät ein PlayStation-Controller ist, der Benutzer die Play

Parameter

keyCode: Enum.KeyCode

Der Enum.KeyCode für die Sie das zugeordnete Bild abrufen.


Rückgaben

ContentId

Die zurückgegebene Bild-ID.

Code-Beispiele

UserInputService - Get Image For KeyCode

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

GetKeysPressed

Diese Funktion gibt ein Array von InputObjects zurück, das mit den derzeit gedrückten Tasten in Verbindung steht.

Diese Matrix kann durchlaufend durchiteriert werden, um festzustellen, welche Tasten derzeit gedrückt werden, basierend auf den InputObject.KeyCode -Werten.

Um zu überprüfen, ob eine bestimmte Taste gedrückt wird, verwenden Sie UserInputService:IsKeyDown() .

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Ein Array von InputObjects mit derzeit gedrückten Tasten.

Code-Beispiele

Double Jump Key Combo

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local actionKey = Enum.KeyCode.LeftShift
local canJump = true
local canDoubleJump = false
local function jumpRequest()
local keysPressed = UserInputService:GetKeysPressed()
for _, key in ipairs(keysPressed) do
if key.KeyCode == actionKey and canJump then
canJump = false
canDoubleJump = true
end
end
end
local function stateChanged(oldState, newState)
-- Double jump during freefall if able to
if oldState == Enum.HumanoidStateType.Jumping and newState == Enum.HumanoidStateType.Freefall and canDoubleJump then
canDoubleJump = false
task.wait(0.2)
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
-- Allow player to jump again after they land
if oldState == Enum.HumanoidStateType.Freefall and newState == Enum.HumanoidStateType.Landed then
canJump = true
end
end
UserInputService.JumpRequest:Connect(jumpRequest)
humanoid.StateChanged:Connect(stateChanged)

GetLastInputType

Diese Funktion gibt 'enum.UserInputType' zurück, der mit dem neuesten Eingang des Benutzers verbunden ist.

Zum Beispiel, wenn der vorherige Eingang des Benutzers die Leertaste gedrückt hatte, würde die Enum.UserInputType zurückgegeben, die als Tastatur verwendet wird.

Das Ereignis UserInputService.LastInputTypeChanged kann verwendet werden, um zu verfolgen, wann der letzte Enum.UserInputType des Benutzers verwendet wird.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Der Enum.UserInputType mit dem neuesten Eingang des Benutzers.

Code-Beispiele

UserInputService:GetLastInputType

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

GetMouseButtonsPressed

Diese Funktion gibt ein Array von InputObjects zurück, das den derzeit gedrückten Maus-Buttons entspricht.

Maus-Buttons, die von dieser Funktion verfolgt werden, enthalten:


<tr>
<td>Maus-Button1</td>
<td>Die linke Maustaste.</td>
</tr>
<tr>
<td>Maus-Button2</td>
<td>Die rechte Maustaste.</td>
</tr>
<tr>
<td>Maus-Button3</td>
<td>Die mittlere Maustaste.</td>
</tr>
NameBeschreibung

Wenn der Benutzer keine Maustaste drückt, wenn die Funktion aufgerufen wird, wird eine leere Arrayzurückgegeben.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Ein Array von InputObjects , das den derzeitigen Kopf- und Maus-Buttons entspricht.

Code-Beispiele

Check which MouseButtons are Pressed

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

GetMouseDelta

Diese Funktion gibt die Änderung, in Pixel, der Position des Spieler:inMouse im letzten gerenderten Frame als Vector2 zurück. Diese Funktion funktioniert nur, wenn die Maus mit der EigenschaftenUserInputService.MouseBehavior gesperrt ist. Wenn die Maus nicht gesperrt ist, werden die zurückgegebenen Werte

Die Empfindlichkeit der Maus, die in den Client-Einstellungen festgelegt ist, und UserInputService.MouseDeltaSensitivity wird das Ergebnis beeinflussen.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Ändern Sie die Bewegung der Maus.

Code-Beispiele

Getting Mouse Delta

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

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

GetMouseLocation

Diese Funktion gibt eine Vector2 zurück, die die aktuelle Bildschirmposition des Spieler:inMouse in Pixeln im Verhältnis zu der oberen linken Ecke anzeigt. Dies berücksichtigt nicht den GUI Inset.

Wenn der Mauszeiger-Standort offscreen ist oder das Gerät des Spieler:inkeine Maus hat, wird der zurückgegebene Wert nicht bestimmt.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

Ein Vector2 , der die aktuelle Bildschirmposition der Maus in Pixeln darstellt.

Code-Beispiele

Move GUI To Mouse Location

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

GetNavigationGamepads

Diese Funktion gibt ein Array von Gamepad UserInputTypes zurück, die verbunden und aktiviert für die GUI-Navigation sind. Diese Liste ist in absteigender Reihenfolge der Priorität, so dass sie überiteriert werden kann, um festzustellen, welche Gamepad Navigationssteuerung aktiviert haben sollen.

Ob eine verbundene Gamepad eine Navigations-Gamepad ist, nur bestimmt, welche Gamepad(s) die Navigations-GUIs steuern. Dies hat keine Auswirkung auf die Steuerung.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:


Rückgaben

Ein Array von UserInputTypes , das für die Navigation der GUI verwendet werden kann, in absteigender Reihenfolge der Priorität.

GetStringForKeyCode

GetStringForKeyCode gibt eine Strings zurück, die einen Schlüssel darstellt, den der Benutzer drücken soll, um einen bestimmten Enum.KeyCode einzugeben, während seine Tastatur布局 beachtet wird. Für Schlüsselkodex, die einige Modifier halten müssen, gibt diese Funktion den Schlüssel zurück, der gedrückt wird, in der Ergänzung zum Modifier. Siehe die Beispiele unten für weitere Erklärung.

Wenn Sie Roblox mit einer nicht-QWERTY-Tastatur verwenden, werden Tastencode mithilfe von entsprechenden QWERTY-Positionen mappt. Zum Beispiel, die T


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

Beispiele auf der Tastatur QWERTY


<tbody>
<tr>
<td><code>enum.KeyCode.Q</code></td>
<td><code>Q-Taste</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.W</code></td>
<td><code>W</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.At</code></td>
<td><code>2</code> weil <code>@</code> mit <kbd>Shift</kbd><kbd>2</kbd> eingetippt ist</td>
</tr>
</tbody>
SchlüsselcodeWert zurückgeben

Beispiele auf der AZERTY-Tastatur


<tbody>
<tr>
<td><code>enum.KeyCode.Q</code></td>
<td><code>A</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.W</code></td>
<td><code>Z</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.At</code></td>
<td><code>É</code></td>
</tr>
</tbody>
SchlüsselcodeWert zurückgeben

Gamepad-Verwendung

GetStringForKeyCode() gibt die String-Karte für den Enum.KeyCode für das zuletzt verbundene Gamepadzurück. Wenn der verbundene Controller nicht unterstützt wird, gibt die Funktion die Standard-String-Konversion für den angefordertenen Codeszurück.

Das folgende Beispiel zeigt, wie Sie benutzerdefinierte Assets für ButtonA mappen können:


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

Gamepad-Kartierungen

Die Richtungspad-Tastencode haben keine Unterschiede basierend auf dem Gerät. Enum.KeyCode.ButtonSelect hat in einigen Fällen ein etwas anderes Verhalten. Verwenden Sie beide PlayStation-Karten, um sicherzustellen, dass Benutzer die richtigen Schaltflächen sehen.


<tbody>
<tr>
<td><code>enum.KeyCode.ButtonA</code></td>
<td><code>ButtonCross</code></td>
<td><code>ButtonA</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td><code>ButtonCircle</code></td>
<td><code>ButtonB</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonX</code></td>
<td><code>ButtonSquare-Button</code></td>
<td><code>ButtonX</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonY</code></td>
<td><code>ButtonTriangle</code></td>
<td><code>ButtonY</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL1</code></td>
<td><code>ButtonL1</code></td>
<td><code>ButtonLB</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL2</code></td>
<td><code>ButtonL2</code></td>
<td><code>ButtonLT-Taste</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL3</code></td>
<td><code>ButtonL3</code></td>
<td><code>ButtonLS</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR1</code></td>
<td><code>ButtonR1</code></td>
<td><code>ButtonRB</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR2</code></td>
<td><code>ButtonR2</code></td>
<td><code>ButtonRT</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR3</code></td>
<td><code>ButtonR3</code></td>
<td><code>ButtonRS</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonStart</code></td>
<td><code>ButtonOptions</code></td>
<td><code>ButtonStart</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonSelect</code></td>
<td><code>ButtonTouchpad</code> und <code>ButtonShare</code></td>
<td><code>ButtonSelect</code></td>
</tr>
</tbody>
SchlüsselcodePlayStation-RückgabewertXbox-Rückgabewert

System-Bilder für Schlüsselcode

Wenn Sie ein Enum.KeyCode in einem Benutzeroberfläche verwenden, das möglicherweise besser als ein Bild darstellt, können Sie die folgenden Legacy-Symbole verwenden. Es wird jedoch empfohlen, dass Sie Class.UserInputService:GetImageForKeyCode()|GetImageForKeyCode() als modernere, cross-Platform-Methode verwenden, um die Xbox- und PlayStation-Controller-Symbole zu er


<tbody>
<tr>
<td><code>enum.KeyCode.ButtonX</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxX.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxX.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonY</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxY.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxY.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonA</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxA.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxA.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxB.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.DPadLeft</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>enum.KeyCode.DPadRight</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>enum.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>enum.KeyCode.DPadDown</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadDown.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadDown.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonSelect</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxView.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxView.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonStart</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxmenu.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxmenu.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLB.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRB.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLT.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRT.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonL3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLS.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.ButtonR3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRS.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Thumbstick1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLSDirectional.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Thumbstick2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRSDirectional.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Backspace</code></td>
<td>
<img src="../../../assets/scripting/controls/backspace.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/backspace.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Return</code></td>
<td>
<img src="../../../assets/scripting/controls/return.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/return.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.LeftShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/Shift.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.RightShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/Shift.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Tab</code></td>
<td>
<img src="../../../assets/scripting/controls/tab.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/tab.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Apostrophe</code></td>
<td>
<img src="../../../assets/scripting/controls/apostrophe.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/apostrophe.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Comma</code></td>
<td>
<img src="../../../assets/scripting/controls/comma.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/comma.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Backquote</code></td>
<td>
<img src="../../../assets/scripting/controls/graveaccent.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/graveaccent.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Period</code></td>
<td>
<img src="../../../assets/scripting/controls/period.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/ период.png</code></td>
</tr>
<tr>
<td><code>enum.KeyCode.Space</code></td>
<td>
<img src="../../../assets/scripting/controls/spacebar.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/spacebar.png</code></td>
</tr>
</tbody>
SchlüsselcodeBildAsset-ID

Parameter

keyCode: Enum.KeyCode

Rückgaben

GetSupportedGamepadKeyCodes

Diese Funktion gibt ein Array von KeyCodes zurück, das die Spielpad mit dem mitgegebenen Enum.UserInputType unterstützt.

Diese Funktion kann verwendet werden, um zu bestimmen, welche KeyCodes unterstützt werden und nicht von einem verbundenen Gamepad unterstützt werden. Um zu bestimmen, ob ein bestimmter KeyCode unterstützt wird, verwenden Sie UserInputService:GamepadSupports() .

Wenn auf einem nicht existierenden oder nicht verbundenen Gamepad aufgerufen wird, gibt diese Funktion eine leere Arrayzurück.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Die Enum.UserInputType des Gamepad.


Rückgaben

Ein Array von KeyCodes unterstützt von der angegebenen Gamepad.

Code-Beispiele

Binding Supported Gamepad KeyCodes

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end

IsGamepadButtonDown

Diese Funktion prüft, ob eine bestimmte Schaltfläche auf einer bestimmten Spielplattform gedrückt wird. Sie gibt true zurück, wenn die gamepad mit der angegebenen button gedrückt wird, sonst gibt sie falsch zurück.

Gültige Benutzer-Eingabetypen

Die angegebene Gamepad sollte einer der folgenden UserInputType-Enzyme sein:


<tr>
<td>enum.UserInputType.Gamepad1-8</td>
</tr>
Name

Gültige KeyCodes

Die angegebene Schaltfläche sollte einer der folgenden KeyCodes-Enums sein:


<tr>
<td>enum.KeyCode.ButtonX</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonY</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonA</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonB</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonR1</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonL1</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonR2</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonL2</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonR3</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonL3</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonStart</td>
</tr>
<tr>
<td>enum.KeyCode.ButtonSelect</td>
</tr>
<tr>
<td>enum.KeyCode.DPadLeft</td>
</tr>
<tr>
<td>enum.KeyCode.DPadRight</td>
</tr>
<tr>
<td>enum.KeyCode.DPadUp</td>
</tr>
<tr>
<td>Ennum.KeyCode.DPadRunter</td>
</tr>
Name

Dies kann verwendet werden, um zu überprüfen, ob ein bestimmter Button, wie A, gedrückt wird. Zum Beispiel:


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

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Der Enum.UserInputType des Gamepad.

gamepadKeyCode: Enum.KeyCode

Der Enum.KeyCode der angegebenen Schaltfläche.


Rückgaben

Ob die angegebene Gamepad-Taste auf dem jeweiligen Gamepad gedrückt wird, wird gedrückt.

Code-Beispiele

Special Action on Gamepad Button Combo

local UserInputService = game:GetService("UserInputService")
local activeGamepad = nil
local buttonX = Enum.KeyCode.ButtonX
local function isGamepadXDown()
if activeGamepad then
return UserInputService:IsGamepadButtonDown(activeGamepad, buttonX)
end
return false
end
local function input(_input, _gameProcessedEvent)
if not isGamepadXDown() then
-- Normal event
else
-- X Button down event
end
end
local function getActiveGamepad()
local activateGamepad = nil
local navigationGamepads = {}
navigationGamepads = UserInputService:GetNavigationGamepads()
if #navigationGamepads > 1 then
for i = 1, #navigationGamepads do
if activateGamepad == nil or navigationGamepads[i].Value < activateGamepad.Value then
activateGamepad = navigationGamepads[i]
end
end
else
local connectedGamepads = {}
connectedGamepads = UserInputService:GetConnectedGamepads()
if #connectedGamepads > 0 then
for i = 1, #connectedGamepads do
if activateGamepad == nil or connectedGamepads[i].Value < activateGamepad.Value then
activateGamepad = connectedGamepads[i]
end
end
end
if activateGamepad == nil then -- nothing is connected, at least set up for gamepad1
activateGamepad = Enum.UserInputType.Gamepad1
end
end
return activateGamepad
end
if UserInputService.GamepadEnabled then
activeGamepad = getActiveGamepad()
UserInputService.InputBegan:Connect(input)
end

IsKeyDown

Diese Funktion gibt zurück, ob der Benutzer den mit dem angegebenen Enum.KeyCode verbundenen Schlüssel hält. Es gibt zurück true wenn der angegebene Schlüssel gedrückt wird oder false wenn er nicht gedrückt wird.

Dies kann verwendet werden, um zu überprüfen, ob ein bestimmter Schlüssel, wie die Leertaste, gedrückt wird. Zum Beispiel:


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

Um eine Liste aller von der Benutzer gedrückten Tasten zu erhalten, verwenden Sie die Funktion UserInputService:GetKeysPressed().

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

keyCode: Enum.KeyCode

Der Enum.KeyCode der Schlüssel.


Rückgaben

Ob der angegebene Schlüssel gedrückt wird.

Code-Beispiele

Special Action on Key Combo Press

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

IsMouseButtonPressed

Diese Funktion benutzt eine Maus-Schaltfläche Enum.UserInputType und gibt einenBoolean zurück, der anzeigt, ob sie derzeit gedrückt wird.

Die Maus-Schaltfläche checkt abhängig von dem Enum.UserInputType-Wert, der an die Funktion als Argument übergeben wird. Zum Beispiel:


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

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Parameter

mouseButton: Enum.UserInputType

Der Enum.UserInputType der Maus-Taste.


Rückgaben

Ob der angegebene Maus-Button derzeit gedrückt gehalten wird.

Code-Beispiele

Create a Custom CameraScript

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

IsNavigationGamepad

Diese Funktion gibt true zurück, wenn die angegebene Enum.UserInputType Spielpad die Navigation und Auswahl GUIs steuern darf.

Wenn Sie ein Navigationsgamepad einstellen möchten, können Sie UserInputService:SetNavigationGamepad() verwenden. Sie können auch UserInputService:GetNavigationGamepads() verwenden, um eine Liste aller Navigationsgamepads anzuzeigen.

Zum Beispiel prüft der Code unten, ob die Gamepad1 als Navigations-Gamepad funktioniert:


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

Eine Liste aller verbundenen Gamepads, unabhängig von der Navigation, kann mit `UserInput/GetConnectedGamepads' abgerufen werden.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadEnum: Enum.UserInputType

Der Enum.UserInputType des angegebenen Gamepad.


Rückgaben

Ob die angegebene Gamepad ein Navigationsgamepad ist.

RecenterUserHeadCFrame

void

Diese Funktion konzentriert die CFrame der VR-Kopfhörer auf die aktuelle Ausrichtung der Kopfhörer, die der Benutzer trägt. Dies bedeutet, dass die aktuelle Ausrichtung des Headsetauf CFrame.new() eingestellt ist.

Verwenden Sie diese Funktion, um das Kopfset CFrame in die Mitte des Spielbereichs zu verschieben, wenn es in einem seltsamen Versatzscheint.

Dies verhält sich identisch zur VRService Funktion, VRService:RecenterUserHeadCFrame() .

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.


Rückgaben

void

Code-Beispiele

UserInputService:RecenterUserHeadCFrame

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

SetNavigationGamepad

void

Die SetRotationGamepad-Funktion legt fest, ob die angegebene Enum.UserInputType Gamepad den GUI-Navigator bewegen kann. Ein Gamepad, das die GUI-Navigator bewegen darf, ist ein Navigations-Gamepad.

Wenn das aktivierte Argument als true weitergegeben wird, kann die Gamepad den GUI-Navigator bewegen. Wenn das false Argument als 2> false2> weitergegeben wird, kann die Gamepad den GUI-Navigator nicht bewegen.

Wenn Sie überprüfen möchten, ob ein bestimmtes Gamepad ein Set ist, um ein Navigations-Gamepad zu sein, können Sie die Funktion Class.UserInputService:IsNavigationGamepad() verwenden. Sie können auch die Funktion Class.UserInputService:GetNavigationGamepads() verwenden, um eine Liste aller Navigations-Gamepads zu extrahieren.

Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadEnum: Enum.UserInputType

Der Enum.UserInputType des angegebenen Gamepad.

enabled: bool

Ob die angegebene Gamepad den GUI-Navigator bewegen kann.


Rückgaben

void

Code-Beispiele

UserInputService:SetNavigationGamepad

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

Ereignisse

DeviceAccelerationChanged

Das Ereignis DeviceAccelerationChanged wird ausgelöst, wenn ein Benutzer ein Gerät bewegt, das einen Beschleunigungsmesser hat.

Ein Beschleunigungsmesser ist ein Komponente, das in den meisten mobilen Geräten gefunden wird, die Beschleunigung (Geschwindigkeit ändern) misst.

Um zu bestimmen, ob das Gerät eines Benutzers ein Beschleunigungsmesser aktiviert hat, siehe UserInputService.AccelerometerEnabled.

Dieses Ereignis kann verwendet werden, um die Bewegung eines Geräts zu verfolgen, das ein Beschleunigungsmesser hat. Ein Beispiel-Verwendung beinhaltet das Bewegen des Spielers, wenn ein mobiles Gerät beschleunigt.

Darüber hinaus kann dieses Ereignis verwendet werden, um UserInputService:GetDeviceAcceleration() zu ermitteln, um die aktuelle Bewegung eines Benutzere Geräts zu ermitteln, wenn das Gerät einen Beschleunigungsmesser hat.

Dieses Ereignis wird nur lokal ausgeführt, was bedeutet, dass nur der Spieler, cuyo Gerät sich bewegt, das Ereignis verwenden kann, und es nur in einem LocalScript funktioniert.

Parameter

acceleration: InputObject

Ein InputObject, mit einem UserInputType von Accelerometer und 2>Class.InputObject.Position|Position2>, die die Kraft der Schwerkraft auf jedem lokalen Geräte-Achse anzeigt.


Code-Beispiele

Control Players Using the Accelerometer

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local SENSITIVITY = 0.2
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local ready = true
local function changeAcceleration(acceleration)
if ready then
ready = false
local accel = acceleration.Position
if accel.Y >= SENSITIVITY then
humanoid.Jump = true
end
if accel.Z <= -SENSITIVITY then
humanoid:Move(Vector3.new(-1, 0, 0))
end
if accel.Z >= SENSITIVITY then
humanoid:Move(Vector3.new(1, 0, 0))
end
if accel.X <= -SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, 1))
end
if accel.X >= SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, -1))
end
task.wait(1)
ready = true
end
end
UserInputService.DeviceAccelerationChanged:Connect(changeAcceleration)

DeviceGravityChanged

Das Ereignis UserInputService.DeviceGravityChanged aktiviert, wenn die Schwerkraft Vector3 eines Geräts auf einem Gerät, das einen Beschleunigungsmesser hat, ändert.

Der Gravity-Vector eines Geräts repräsentiert die Kraft der Schwerkraft auf jeder der drei Achsen des Geräts X, Y und Z. Während die Schwerkraft nie ändert, verändert sich die Kraft, die sie auf jeder Achse ausübt, wenn das Gerät dreht und Ausrichtung ändert. Der Gravity-Wert, der auf jeder Achse ausgewählt ist, repräsentiert die Einheit, der von -1 bis 1 reicht.

Ein Beschleunigungsmesser ist ein Komponente, das in den meisten mobilen Geräten gefunden wird, die Beschleunigung (Geschwindigkeit ändern) misst.

Dieses Ereignis kann verwendet werden, um die reale Richtung der Schwerkraft auf einem Benutzere Gerät zu bestimmen. Dies kann dann verwendet werden, um die Schwerkraft auf einem Benutzer Gerät innerhalb des Spiels zu simulieren, wie auf In-Game Objekten (siehe Beispiel unten).

Um zu überprüfen, ob das Gerät eines Benutzers ein aktiviertes Beschleunigungsmesser hat, siehe UserInputService.AccelerometerEnabled. Wenn das Gerät ein aktiviertes Beschleunigungsmesser hat, können Sie die Class.UserInputService:GetDeviceGravity() -Funktion verwenden, um die aktuelle Kraft des Schwerkraftes auf dem Gerät des Benutzers zu erhalten.

Parameter

gravity: InputObject

Ein InputObject, mit einer InputObject.Position -Eigenschaft, die die Kraft der Schwerkraft auf jedem lokalen Gerät-Achse anzeigt. Diese Position kann als Richtung verwendet werden, um die Richtung der Schwerkraft in Bezug auf das Gerät zu bestimmen.


Code-Beispiele

Move a Ball using the Accelerometer

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
Create a Gyroscopic Camera

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

DeviceRotationChanged

Das Ereignis DeviceRotationChanged wird ausgelöst, wenn ein Benutzer ein Gerät dreht, das ein Gyroskop hat.

Ein Gyroskop ist ein Komponente, das in den meisten mobilen Geräten gefunden wird, die die Ausrichtung und die Rotationsgeschwindigkeit erkennen.

Das Ereignis ist nützlich, um die Ausrichtung des Geräts zu verfolgen und wie sich die Benutzer drehen, um ihr Gerät. Um die aktuelle GeräteRotation festzustellen, können Sie die Funktion UserInputService:GetDeviceRotation() verwenden.

Um zu überprüfen, ob das Gerät eines Benutzers ein aktiviertes Gyroskop hat, und dass dieses Ereignis initiierenwird, siehe UserInputService.GyroscopeEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Parameter

rotation: InputObject

Ein InputObject , der Informationen über die Rotation des Geräts bietet. InputObject.Position repräsentiert den neuen Rotationswert eines Vector3 und 1> Class.InputObj.Delta1> repräsentiert die Änderung in der Rotation in einem 4> Datatype.Vector34> -Position.

cframe: CFrame

Ein CFrame , das die aktuelle Ausrichtung des Geräts repräsentiert.


Code-Beispiele

Create a Gyroscopic Camera

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

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end

GamepadConnected

Das Ereignis GamepadConnected wird ausgelöst, wenn ein Gamepad mit dem Client verbunden ist.

Da ein Roblox-Spiel mehrere Controller unterstützt, ist dieses Ereignis nützlich, wenn es mit dem UserInputService.GamepadDisconnected -Ereignis kombiniert wird, um zu überprüfen, welche Controller/Gamepads aktiv sind. Sie können auch UserInputService:GetConnectedGamepads() verwenden, um den richtigen Gamepad zu finden.

Das folgende Beispiel zeigt ein Beispiel für die Verwendung eines Trackings, wenn ein Gamepad mit dem Client verbunden ist.


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

Wenn Sie sehen möchten, welche Geräte verbunden sind, können Sie die Funktion UserInputService:GetConnectedGamepads() verwenden.

Da dieses Ereignis lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Der Enum.UserInputType der verbundenen Gamepad.


GamepadDisconnected

Das GamepadDisconnected-Ereignis wird ausgelöst, wenn ein Gamepad getrennt wird.

Da ein Roblox-Spiel mehrere Controller unterstützt, ist dieses Ereignis nützlich, wenn es mit dem UserInputService.GamepadConnected -Ereignis kombiniert wird, um zu überprüfen, welche Controller/Gamepads aktiv sind. Sie können auch UserInputService:GetConnectedGamepads() verwenden, um den richtigen Gamepad zu finden.

Das folgende Beispiel zeigt ein Beispiel für die Verwendung eines Trackings, wenn ein Gamepad vom Client getrennt wird.


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

Da dieses Ereignis lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

gamepadNum: Enum.UserInputType

Der Enum.UserInputType des getrennten Gamepad.


InputBegan

Das Ereignis InputBegan wird ausgelöst, wenn ein Benutzer mit der Interaktion über ein Mensch-Computer-Schnittstelle (Maus-Button, Touch-Anfang, Tastatur-Button usw.) beginnt.

Es kann verwendet werden, um den Beginn der Benutzerinteraktion zu verfolgen, z. B. wenn ein Benutzer mit einem GUI-Element interagiert, eine Gamepadusw. Es erfasst keine Mausrad-Bewegungen.

Dieses Ereignis kann zusammen mit UserInputService.InputChanged und UserInputService.InputEnded verwendet werden, um zu verfolgen, wenn der Benutzer-Eingang beginnt, sich ändert und beendet.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Parameter

Eine InputObject Instanz, die Informationen über die Eingabe des Benutzers enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Handling InputBegan

-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

InputChanged

Das Ereignis "InputChanged" wird ausgelöst, wenn ein Benutzer die Art und Weise, wie sie mit einem Menschen-Computer-Interface-Gerät interagieren, ändert (Maus-Button nach unten, Touch-Anfang, Tastatur-Button nach unten usw.).

Um Ereignisse, die automatisch von Roblox verarbeitet werden, wie das Scrollen in einem ScrollingFrame , zu ignorieren, überprüfen Sie das Spiel verarbeitete Ereignis -Argument ist falsch. Dieses Ereignis kann neben UserInputService.InputBegan und 1> Class.UserInputService.InputEnded1>

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Parameter

Eine InputObject Instanz, die Informationen über die Eingabe des Benutzers enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Handling InputChanged

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

InputEnded

Das Event Ended wird ausgelöst, wenn ein Benutzer aufhört, mit einem Human-Computer-Interface-Gerät zu interagieren (Maus-Button nach unten, Touch-Anfang, Tastatur-Button nach unten usw.). Dies ist nützlich, wenn Sie verfolgen, wenn ein Benutzer eine Schlüssel, eine Maus-Taste usw. loslässt.

Dieses Ereignis kann zusammen mit UserInputService.InputBegan und UserInputService.InputChanged verwendet werden, um zu verfolgen, wenn der Benutzer-Eingang beginnt, Änderungen vornehmen und beenden.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Parameter

Eine InputObject Instanz, die Informationen über die Benutzer-Eingabe enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Handling InputEnded

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

JumpRequest

Das Ereignis UserInputService JumpRequest wird ausgelöst, wenn es eine Sprunganfrage vom Client gibt, z. B. wenn der Client die Leertaste oder die Sprungschaltfläche auf dem mobilen Gerät drückt.

Dieses Ereignis wird ausgelöst, wenn der Benutzer versucht, seinen Class.Player.Character -Sprung zu machen. Standardverhalten reagiert auf einen Sprunganfrage, indem das Eigenschaft Player.Character des Spieler:inauf true gesetzt wird, was den Charakter des Spieler:inspringen lässt.

Das Ereignis kann verwendet werden, um jedes Mal zu überprüfen, wenn ein Spieler springen möchte. Statt es zu verwenden, um einen Spieler zu springen, sollte dies verwendet werden, um das Standard-Sprungverhalten zu ändern - z. B. das Deaktivieren von Sprungen.

Zum Beispiel druckt der Code unten jedes Mal "Springen", wenn der Spieler eine Anfragesendet.


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

Da dieses Ereignis mehrere Anfrageauslöst, wird ein Debounce-Ereignis empfohlen.

Wenn Sie Schlüssel oder Schaltflächen an andere Aktionen anschließen möchten, berücksichtigen Sie die Verwendung von Ereignissen wie UserInputService:GetKeysPressed() und UserInputService.InputBegan oder der ContextActionService.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.


Code-Beispiele

Disable Jumping

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Fires when the user tries to jump
local function jump()
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
UserInputService.JumpRequest:Connect(jump)

LastInputTypeChanged

Das Ereignis UserInputService.LastInputTypeChanged wird ausgelöst, wenn sich der Client ändert, wie sie mit einem Human-Computer-Interface-Gerät interagieren. (z. B. von MouseMovement zu MouseWheel oder von Thumbstick1 zu Thumbstick2).

Um den Wert des letzten Eingabe eingebenzu erhalten, unabhängig davon, ob er geändert wurde, können Sie die Funktion UserInputService:GetLastInputType() verwenden.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Parameter

lastInputType: Enum.UserInputType

Ein Enum.UserInputType mit der letzten eingebenanzeigen.


Code-Beispiele

Hide Mouse During Keyboard Input

local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)

PointerAction

PointerAction wird ausgelöst, wenn der Benutzer eine bestimmte Mause-Action ausführt. Insbesondere das Scrollen der Maus-Rad.

Parameter

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

TextBoxFocusReleased

Das TextBoxFocusRelease-Ereignis wird ausgelöst, wenn ein Client den Fokus auf ein TextBox verliert, normalerweise, wenn ein Client den Text-Eintrag in ein TextBox stoppt, indem er auf Return oder auf eine andere Stelle auf dem Bildschirm klickt/berührt.

Zum Beispiel druckt der Code unten den Namen der TextBox, die fokussiert verliert, wenn das Ereignis feuert.


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

Es kann neben UserInputService.TextBoxFocused verwendet werden, um zu verfolgen, ob ein Textfeld Fokus gewinnt und verliert.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

textboxReleased: TextBox

Die TextBox, die den Fokus verloren hat.


Code-Beispiele

TextBoxFocusReleased

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

TextBoxFocused

Das TextBoxFocused-Ereignis wird ausgelöst, wenn ein Gewinnfokus auf ein TextBox - typischerweise, wenn ein Client auf eine Textbox klickt/antippt, um mit dem Eingeben von Text zu beginnen. Dies wird auch ausgelöst, wenn ein Textbox-Fokus mit TextBox:CaptureFocus() konzentriert ist.

Zum Beispiel druckt der Code unten den Namen der TextBox an, wenn das Ereignis feuert.


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

Es kann neben UserInputService.FocusReleased verwendet werden, um zu verfolgen, wenn ein Textfeld Fokus gewinnt und verliert.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

textboxFocused: TextBox

Die TextBox, die Fokus gewonnen hat.


Code-Beispiele

Modifying a TextBox on Focused and FocusReleased

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

TouchEnded

Das TouchEnded-Ereignis wird ausgelöst, wenn ein Benutzer seinen Finger von der Bildschirm eines TouchEnabled-Geräts loslässt, wodurch der Touch-Eingang mit dem Gerät beendet wird.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer aufhört, den Bildschirm seines Geräts zu berühren. Es kann mit UserInputService.TouchStarted kombiniert werden, um zu bestimmen, wann ein Benutzer beginnt und auf den Bildschirm berührt.

Zum Beispiel druckt der Code unten die Bildschirmposition, in der der Benutzer auf dem Bildschirm nicht mehr anfassen wird.


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

Das Touch-Eingabeelement ist das gleiche Eingabeelement im gesamten Leben des Touch. So vergleicht man InputObjects , wenn sie Touch-Objekte sind, um zu bestimmen, ob es der gleiche Finger ist.

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

Eine InputObject Instanz, die Informationen über die Eingabe des Benutzers enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

The Difference Between TouchTap and TouchLongPress

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

TouchLongPress

Ausgelöst, wenn ein Benutzer mindestens einen Finger für eine kurze Zeit in der gleichen Bildschirmposition eines TouchEnabled-Geräts hält.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer seinen Finger auf einem in-Game GUI oder Element hält.

Das folgende Beispiel druckt die state des langen Drücken, wenn der Benutzer mindestens einen Finger für eine kurze Zeit auf derselben Bildschirmposition hält. Mögliche Zustände umfassen: Beginnen, Ändern, 1>Enden1>, 4>Abbrechen4> und 7>Nichts7>.


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)

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Es kann mit UserInputService.TouchStarted und UserInputService.TouchEnded kombiniert werden, um zu bestimmen, wann ein Benutzer beginnt, den Bildschirm zu berühren, und aufhört, um zu stoppen.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

touchPositions: Array

Ein Array von Vector2 Objekten, die die Position der Finger anzeigt, die in der Gestik verwendet werden.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

The Difference Between TouchTap and TouchLongPress

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

TouchMoved

Das TouchMoved-Ereignis wird ausgelöst, wenn ein Benutzer seinen Finger auf einem TouchEnabled-Gerät bewegt.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer seinen Finger bewegt, während er den Bildschirm eines TouchEnabled-Geräts berührt. Es kann nützlich sein, zu verfolgen, ob ein Benutzer seinen Finger auf dem Bildschirm bewegt, sowie wo der Benutzer seinen Finger bewegt.

Der Code unten druckt "Touch moved from" der vorherigen Vector2 Position "to" die neue Vector2 Position des Benutzers auf einem TouchEnabled Gerät.


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)

Es kann mit UserInputService.TouchStarted und UserInputService.TouchEnded kombiniert werden, um zu bestimmen, wann ein Benutzer den Bildschirm berührt, wie sein Finger sich bewegt, wenn er ihn berührt, und wenn er aufgehört hat, den Bildschirm zu berühren.

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

Eine InputObject Instanz, die Informationen über die Eingabe des Benutzers enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

The Difference Between TouchTap and TouchLongPress

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

TouchPan

Das TouchPan-Ereignis wird ausgelöst, wenn ein Benutzer mindestens einen Finger auf einem TouchEnabled Gerät zieht.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer seinen Finger auf dem Bildschirm eines TouchEnabled-Geräts bewegt - z. B. um die Camera in einem benutzerdefinierten Skript, das. PL: die Skriptszu drehen.

Das folgende Snippet druckt "Geschwindigkeit des Ziehens" gefolgt von der Geschwindigkeit des Benutzers, wenn der Benutzer seinen Finger auf dem Bildschirm zieht.


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

Schau dir eine weitere nützliche UserInputService Funktion hier an UserInputService.TouchRotate.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

touchPositions: Array

Ein Array von Vector2 Objekten, die die Positionen der Tasten (z. B. Finger) im Zug anzeigen.

totalTranslation: Vector2

Die Größe des Pizzagewichts von Anfang an (in Pixeln).

velocity: Vector2

Die Geschwindigkeit des Pfanne-Gestells (in Pixeln) pro Sekunde.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Create a Custom CameraScript

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

TouchPinch

Ausgelöst, wenn ein Benutzer zwei Finger auf dem Bildschirm eines TouchEnabled-Geräts platziert und bewegt.

Das folgende Snippet druckt, wie viel sich die Kamera-Zoom-Skala seit dem Anfang des Touch-Pinsch hat ändern.


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

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden Eingaben nicht erkannt, wenn das Fenster minimiert wird. Als dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

touchPositions: Array

Ein Array von Vector2s, das die Bildschirmposition in Pixel anzeigt, der die Finger, die in der Poinch-Geste beteiligt sind.

scale: number

Die Größe des Zooms von Anfang an Ende (in Pixeln) geteilt durch die Zoombereitstellungspositionen.

velocity: number

Die Geschwindigkeit des Pinzerschlusses (in Pixeln) pro Sekunde.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Create a Custom CameraScript

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

TouchRotate

Das TouchRotate-Ereignis wird ausgelöst, wenn ein Benutzer zwei Finger auf einem TouchEnabled-Gerät dreht.

Zum Beispiel druckt der folgende Code, wie viel die Kamera seit Beginn der Touch-Rotation gedreht hat.


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

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Die Kern-Skripte, die die Kamera des Benutzers auf einem mobilen Gerät steuern, verwenden Code, der wie dieses Ereignis funktioniert. Die beste Praktik für dieses Ereignis ist, es zu verwenden, wenn Sie ein mobiles Kamerasystem erstellen, um die Standard-Kern-Skripte zu überschreiben.

Siehe auch:

Parameter

touchPositions: Array

Ein Array von Vector2s, das die Positionen der Finger anzeigt, die in der Gestik verwendet werden.

rotation: number

Die Anzahl der Grad, in denen sich der Gestik seit dem Start des Gestik dreht.

velocity: number

Die Veränderung in der Rotation (in Grad) geteilt durch die Dauer der Veränderung (in Sekunden).

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Create a Custom CameraScript

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

TouchStarted

Das TouchStarted-Ereignis wird ausgelöst, wenn ein Benutzer mit seinem Finger auf einem TouchEnabled-Gerät berührt, beginnend den Touch-Eingang mit dem Gerät.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer den Bildschirm seines Geräts berührt beginnt. Es kann mit UserInputService.TouchEnded kombiniert werden, um zu bestimmen, wann ein Benutzer den Bildschirm berührt beginnt und aufhört.

Das Touch-Eingabeelement ist das gleiche Eingabeelement im gesamten Leben des Touch. So vergleicht man InputObjects , wenn sie Touch-Objekte sind, um zu bestimmen, ob es der gleiche Finger ist.

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

Eine InputObject Instanz, die Informationen über die Eingabe des Benutzers enthält.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Tracking Touches

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

TouchSwipe

Das TouchSwipe-Ereignis wird ausgelöst, wenn ein Benutzer mit seinem Finger auf einem TouchEnabled-Gerät schwört.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wann ein Benutzer seinen Finger auf dem Bildschirm seines Geräts wischt und in welche Richtung der Benutzer wischt.

Für eine präzisere Verfolgung der Touch-Eingabe-Bewegung verwenden Sie mit UserInputService.TouchMoved

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

swipeDirection: Enum.SwipeDirection

Ein DirectionSwipeDirection ", das die Richtung anzeigt, in die der Benutzer geschwippt hat.

numberOfTouches: number

Anzahl der Berührungen (z. B. Finger), die in der Gestik verwendet werden.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

Touch Swipe a GUI

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

TouchTap

Das TouchTap-Ereignis wird ausgelöst, wenn der Benutzer mit dem Finger auf dem Bildschirm auf einem TouchEnabled-Gerät berührt/antastet.

Dieses Ereignis wird ausgelöst, unabhängig davon, ob der Benutzer die Spielwelt berührt/antastet oder ein GUI -Element. Wenn Sie ein Ereignis suchen, das nur dann ausgeführt wird, wenn der Benutzer die Weltberührt/antastet, verwenden Sie UserInputService.TouchTapInWorld.

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Parameter

touchPositions: Array

Ein Array von Vector2 Objekten, die die Position der Finger anzeigt, die in der Tasten-Geste verwendet werden.

gameProcessedEvent: bool

Zeigt an, ob der SpielEngine interne auf diese Eingabe reagiert und darauf gehandelt hat. Normalerweise bezieht sich dies auf die Verarbeitung von UI, so dass wenn eine Schaltfläche von dieser Eingabe berührt oder angeklickt wurde, gameProcessedEvent``true wäre. Dies gilt auch für Eingangsereignisse, die über ContextActionService verbunden sind.


Code-Beispiele

The Difference Between TouchTap and TouchLongPress

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

TouchTapInWorld

Das TouchTapInWorld-Ereignis wird ausgelöst, wenn der Benutzer seinen Finger auf dem Bildschirm auf einem TouchEnabled-Gerät berührt/berührt. Es wird ausgelöst, wenn der Benutzer in der Welttippt.

Dieses Ereignis kann verwendet werden, um zu bestimmen, wenn ein Benutzer auf den Bildschirm tippt und nicht auf ein GUI-Element tippt. Wenn der Benutzer auf ein GUI-Element tippt, wird UserInputService.TouchTap stattdessen ausgeführt, anstatt TouchTapInWorld.

Um zu überprüfen, ob das Gerät eines Benutzers TouchEnabled ist, und dass Touch-Ereignisse initiierenwerden, siehe UserInputService.TouchEnabled.

Dieses Ereignis wird nur ausgelöst, wenn das Roblox-Client-Fenster im Fokus ist. Zum Beispiel werden keine Eingaben erkannt, wenn das Fenster minimiert wird.

Da es nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.

Siehe auch:

Parameter

position: Vector2

Ein Vector2 zeigt die Position des Berührungs.

processedByUI: bool

Ob der Benutzer auf ein GUI-Element tippt.


Code-Beispiele

Create a Part in World at Touch Position

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

WindowFocusReleased

Das UserInputService WindowFocusRelease-Ereignis wird ausgelöst, wenn das Fenster des Roblox-Clients den Fokus verliert - normalerweise, wenn der Roblox-Client vom Benutzer minimiert wird.

Zum Beispiel druckt der Code unten "Window focus released", wenn der Roblox-Client den Fokus verliert.


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

Dieses Ereignis kann neben UserInputService.WindowFocused verwendet werden, um zu überprüfen, ob der Roblox-Client auf den Bildschirm eines Benutzers aktiv fokussiert ist.

Da es nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.


Code-Beispiele

Window Focus AFK Script (Script)

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

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

WindowFocused

Das UserInputService Ereignis mit dem WindowFocused feuert ab, wenn sich der Roblox-Client-Fenster auf den Benutzer fokussiert - normalerweise, wenn der Roblox-Client maximiert/aktiviert auf dem Benutzer-Bildschirm ist.

Zum Beispiel druckt der Code unten "Window focused", wenn der Roblox-Client den Fokus gewinnt.


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

Dieses Ereignis kann neben UserInputService.WindowFocusReleased verwendet werden, um zu überprüfen, ob der Roblox-Client auf den Bildschirm eines Benutzers aktiv fokussiert ist.

Da dieses Ereignis nur lokal ausgeführt wird, kann es nur in einem LocalScript verwendet werden.


Code-Beispiele

Window Focus AFK Script (Script)

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

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