UserInputService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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
-- 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
Beschreibt, ob das Gerät des Benutzers ein Beschleunigungsmesser hat.
Beschreibt, ob das verwendete Gerät ein verfügbares Gamepad hat.
Beschreibt, ob das Gerät des Benutzers ein Gyroskop hat.
Beschreibt, ob das Gerät des Benutzers eine Tastatur hat.
Bestimmt, ob die Maus des Benutzers frei bewegt oder gesperrt werden kann.
Skaliert die Ausgabe des Delta (Änderung) des Benutzers Mouse .
Beschreibt, ob das Gerät des Benutzers eine Maus verfügbar hat.
Die Bild-ID, die als Benutzer-Maus-Symbol verwendet wird.
Bestimmt, ob das Mouse-Symbol sichtbar ist.
Bestimmt die Position der Tastatur auf dem Bildschirm.
Bestimmt die Größe der Tastatur auf dem Bildschirm.
Beschreibt, ob eine On-screen-Tastatur auf dem Bildschirm des Benutzers momentan sichtbar ist.
Beschreibt, ob das aktuelle Gerät des Benutzers einen Touch-Bildschirm hat.
Zeigt an, ob der Benutzer eine virtuelle Realität-Headset verwendet.
Methoden
Gibt zurück, ob die angegebene Enum.UserInputType Spielplattform eine entsprechende Schaltfläche unterstützt, die der angegebenen Enum.KeyCode entspricht.
Gibt eine Liste von Enum.UserInputType Spielkonsolen zurück, die derzeit verbunden sind.
Kehrt ein InputObject zurück, das die aktuelle Beschleunigung des Geräts beschreibt.
Kehrt ein InputObject zurück, das die aktuelle Vektorkraftdes Geräts beschreibt.
Gibt ein InputObject und ein CFrame zurück, die die aktuelle Vektorkraftdes Geräts beschreiben.
Gibt die derzeitige TextBox zurück, auf die der Client sich derzeit konzentriert.
Gibt zurück, ob eine Spielkonsole mit dem angegebenen Enum.UserInputType "gamepadNum" verbunden ist.
Gibt eine Matrix von InputObjects für alle verfügbaren Eingaben auf der angegebenen Gamepad zurück, die den letzten Eingangszustand jedes Eingangs repräsentieren.
Rückgibt ein Bild für den angefordertenen Enum.KeyCode .
Gibt eine Matrix von InputObjects zurück, die mit dem derzeit gedrückten keys assoziiert ist.
Kehrt den Enum.UserInputType zurück, der mit dem neuesten Eingang des Benutzers verbunden ist.
Gibt eine Matrix von InputObjects zurück, die den derzeit gedrückten Maus-Buttons entspricht.
Gibt die Position des Spieler:inzurück, in Pixeln, in dem letzten gerenderten Frame. Funktioniert nur, wenn die Maus gesperrt ist.
Gibt die aktuelle Bildschirmposition des Spieler:inzurück, die relativ zu der oberen linken Ecke des Bildschirms liegt.
Gibt eine Reihe von gamepads verbundenen und aktivierten GUI-Navigationsgeräten zurück, die in der Hierarchie der Priorität in aufsteigender Reihenfolge verwendet werden.
Gibt eine Strings zurück, die ein Benutzer drücken soll, um einen bestimmten Enum.KeyCode einzugeben.
Gibt eine Liste von KeyCodes zurück, die die Spielplattform mit den mitgegebenen Enum.UserInputType unterstützt.
Bestimmt, ob ein bestimmter Button auf einer bestimmten Gamepadgedrückt wird.
Gibt zurück, ob der angegebene key derzeit gedrückt gehalten wird.
Gibt zurück, ob der angegebene mouse button derzeit gedrückt gehalten wird.
Gibt zurück, wenn die angegebene Enum.UserInputType Navigation GUIs steuern darf.
Verbessert die CFrame der VR-Kopfset auf die aktuelle Ausrichtung der getragenen Kopfset.
Setzt, ob und wie die angegebene Gamepad-Navigator bewegt werden kann.
Ereignisse
Ausgelöst, wenn ein Benutzer ein Gerät bewegt, das ein Beschleunigungsmesser hat. Wird verwendet, um die Bewegung eines realen Geräts innerhalb eines Roblox-Spiels zu verfolgen.
Ausgelöst, wenn die Kraft der Schwerkraft auf einem Gerät, das einen aktivierten Beschleunigungsmesser hat, ändert - wie ein mobiles Gerät.
Ausgelöst, wenn ein Benutzer ein Gerät dreht, das ein Gyroskop hat.
Feuert, wenn eine Spielkonsole mit dem Client verbunden ist. Überträgt die „gamepadNum“ des Spielens, das verbunden war.
Feuert, wenn ein Gamepad vom Client getrennt wird. Übergibt das Enum.UserInputType des Gamepad, das getrennt wurde.
Ausgelöst, wenn ein Benutzer mit einem Gerät zur Interaktion über ein menschliches Computer-Interface beginnt - wie eine Maus oder eine Gamepad.
Ausgelöst, wenn ein Benutzer die Art und Weise, wie sie mit einem Menschen-Computer-Interface-Gerät interagieren, ändert.
Feuert, wenn ein Benutzer aufhört, über ein Mensch-Computer-Schnittstelle-Gerät zu interagieren.
Feuert, wenn der Client eine Anfrage für seinen Charakter zum springenmacht.
Feuert, wenn sich der Client's Enum.UserInputType verändert.
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : bool):RBXScriptSignal
Feuert, wenn der Benutzer eine bestimmte Zeigeraktion ausführt (Rad, Schraube, schwenken).
Feuere, wenn der Client den Fokus auf ein TextBox verliert.
Gefällt aus, wenn der Client sich auf ein TextBox konzentriert.
Fired, wenn ein Benutzer seinen Finger von dem Bildschirm auf einem TouchEnabled-Gerät loslässt - wie zum Beispiel den Bildschirm eines mobilen Geräts.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Ausgelöst, wenn ein Benutzer mindestens einen Finger für eine kurze Zeit in derselben Bildschirmposition auf einem TouchEnabled-Gerät hält - wie zum Beispiel der Bildschirm eines Mobilgeräts.
Ausgelöst, wenn ein Benutzer seinen Finger auf einem TouchEnabled-Gerät bewegt - wie zum Beispiel den Bildschirm eines Apple-iPad oder iPhone oder ein Google-Android-Handy.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Ausgelöst, wenn ein Benutzer mindestens einen Finger auf einer TouchEnabled -Gerät zieht, z. B. auf den Bildschirm eines Mobilgeräts.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Ausgelöst, wenn ein Benutzer mit den Fingern auf einem TouchEnabled Gerät kratzt - wie zum Beispiel auf dem Bildschirm eines Mobilgeräts.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : bool):RBXScriptSignal
Feuert, wenn ein Benutzer zwei Finger auf einem TouchEnabled Gerät dreht - wie der Bildschirm eines mobilen Geräts.
Ausgelöst, wenn ein Benutzer seinen Finger auf ein TouchEnabled-Gerät platziert - wie den Bildschirm eines Apple-iPad oder iPhone oder ein Google-Android-Handy.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : bool):RBXScriptSignal
Ausgelöst, wenn ein Benutzer mit seinem Finger auf einem TouchEnabled Gerät schwört - wie zum Beispiel auf dem Bildschirm eines mobilen Geräts.
Ausgelöst, wenn ein Benutzer mit seinem Finger auf ein TouchEnabled-Gerät tippt - wie zum Beispiel auf den Bildschirm eines Mobilgeräts.
Feuert, wenn ein Benutzer auf ein TouchEnabled Gerät tippt, wie z. B. auf den Bildschirm eines Mobilgeräts.
Feuert, wenn sich der Fokus des Roblox-Clients auf dem Bildschirm des Benutzers verliert.
Feuert, wenn das Fenster des Roblox-Clients auf den Bildschirm des Benutzers fokussiert wird.
Eigenschaften
AccelerometerEnabled
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.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("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
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
GamepadEnabled
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
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
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.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("Gyroscope is not enabled!")end
Da UserInputService nur auf der Client-Seite ist, kann diese Eigenschaft nur in einem LocalScript verwendet werden.
Code-Beispiele
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
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
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
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:
- Standard : Die Maus bewegt sich frei auf dem Bildschirm des Benutzers.
- LockCenter : Die Maus ist gesperrt und kann nicht von, dem Zentrum des Benutzers Bildschirms, bewegt werden.
- 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
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
MouseDeltaSensitivity
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
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
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 thenprint("The user's device has an available mouse!")elseprint("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
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
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
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
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
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
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
local UserInputService = game:GetService("UserInputService")
print(UserInputService.OnScreenKeyboardPosition)
OnScreenKeyboardSize
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
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
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 thenprint("The user's device has a touchscreen!")elseprint("The user's device does not have a touchscreen!")end
Siehe auch:
Code-Beispiele
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
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.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("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
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
Die Enum.UserInputType des Gamepad.
Der Enum.KeyCode des Buttons in der Frage.
Rückgaben
Ob die angegebene Gamepad-Taste mit dem angegebenen Enum.KeyCode kompatibel ist.
Code-Beispiele
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
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
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
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:
- Die Delta-Eigenschaft beschreibt die Menge der Rotation, die zuletzt stattfand
- Die CFrame ist die aktuelle Rotation des Geräts im Verhältnis zu seinem Standard-Referenzrahmen.
Code-Beispiele
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
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
Die Enum.UserInputType des Spielspads in der Frage.
Rückgaben
Ob eine Spielkonsole mit Enum.UserInputType verbunden ist.
Code-Beispiele
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
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
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
Der Enum.KeyCode für die Sie das zugeordnete Bild abrufen.
Rückgaben
Die zurückgegebene Bild-ID.
Code-Beispiele
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
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
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>
Name | Beschreibung |
---|
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
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
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local function OnRenderStep()
local delta = UserInputService:GetMouseDelta()
print("The mouse has moved", delta, "since the last step.")
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, OnRenderStep)
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end
GetMouseLocation
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
Code-Beispiele
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:
- UserInputService:SetNavigationGamepad() , um ein Gamepad für GUI-Navigation zu aktivieren oder zu deaktivieren
- UserInputService:IsNavigationGamepad() , um zu überprüfen, ob ein Gamepad für die GUI-Navigation aktiviert ist
- UserInputService:GetConnectedGamepads() , um alle Gamepads zurückzukehren, die mit der GUI-Navigationssteuerung verbunden sind, unabhängig von der Verbindung
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.Parentlocal mapKey = Enum.KeyCode.MtextLabel.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üsselcode | Wert 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üsselcode | Wert 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.Parentlocal key = Enum.KeyCode.ButtonAlocal mappings = {ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA assetButtonCross = "rbxasset://BUTTON_CROSS_ASSET" -- Replace with the desired ButtonCross asset}local mappedKey = UserInputService:GetStringForKeyCode(key)local image = mappings[mappedKey]imageLabel.Image = image
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üsselcode | PlayStation-Rückgabewert | Xbox-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üsselcode | Bild | Asset-ID |
---|
Parameter
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
Die Enum.UserInputType des Gamepad.
Rückgaben
Code-Beispiele
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.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)
Da UserInputService nur auf der Client-Seite ist, kann diese Funktion nur in einem LocalScript verwendet werden.
Siehe auch:
- UserInputService:IsKeyDown() - Ein ähnlicher Methode mit einer anderen Verwendung: Um zu überprüfen, ob ein gegebenes key auf einer keyboard gedrückt wird.
Parameter
Der Enum.UserInputType des Gamepad.
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
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:
- Enum.UserInputType.IsGamepadButtonDown - Ein ähnliches Ereignis mit einer anderen Verwendung: Um zu überprüfen, ob ein bestimmter button auf einer gamepad gedrückt wird.
Parameter
Der Enum.KeyCode der Schlüssel.
Rückgaben
Ob der angegebene Schlüssel gedrückt wird.
Code-Beispiele
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
Der Enum.UserInputType der Maus-Taste.
Rückgaben
Ob der angegebene Maus-Button derzeit gedrückt gehalten wird.
Code-Beispiele
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) thenprint("Gamepad is a navigation gamepad!")elseprint("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
Der Enum.UserInputType des angegebenen Gamepad.
Rückgaben
Ob die angegebene Gamepad ein Navigationsgamepad ist.
RecenterUserHeadCFrame
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
Code-Beispiele
local UserInputService = game:GetService("UserInputService")
UserInputService:RecenterUserHeadCFrame()
SetNavigationGamepad
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
Der Enum.UserInputType des angegebenen Gamepad.
Ob die angegebene Gamepad den GUI-Navigator bewegen kann.
Rückgaben
Code-Beispiele
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
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
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
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
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
DeviceRotationChanged
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
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.
Code-Beispiele
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local camera = workspace.CurrentCamera
local currentRotation = camera.CFrame -- CFrame.new(Vector3.new(0,0,0), Vector3.new(0,0,0))
local lastInputFrame = nil
local upsideDown = false
task.wait()
local orientationSet = false
local function GravityChanged(gravity)
if not orientationSet then
upsideDown = (gravity.Position.X < -0.5 or gravity.Position.Z > 0.5)
orientationSet = true
end
end
local function RotationChanged(_rotation, rotCFrame)
if orientationSet then
if not lastInputFrame then
lastInputFrame = rotCFrame
end
local delta = rotCFrame * lastInputFrame:inverse()
local x, y, z = delta:ToEulerAnglesXYZ()
if upsideDown then
delta = CFrame.Angles(-x, y, z)
else
delta = CFrame.Angles(x, -y, z)
end
currentRotation = currentRotation * delta
lastInputFrame = rotCFrame
end
end
local function HideCharacter()
for _, limb in pairs(character:GetChildren()) do
if limb:IsA("Part") then
limb.Transparency = 1
end
end
end
if UserInputService.GyroscopeEnabled then
UserInputService.DeviceGravityChanged:Connect(GravityChanged)
UserInputService.DeviceRotationChanged:Connect(RotationChanged)
HideCharacter()
RunService:BindToRenderStep("Camera", Enum.RenderPriority.Camera.Value, function()
camera.CFrame = CFrame.new(head.Position - Vector3.new(0, 8, 10)) * currentRotation
camera.Focus = CFrame.new(currentRotation * Vector3.new(0, 0, -10))
end)
end
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end
GamepadConnected
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
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
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.
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
-- 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.
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
-- 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.
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
-- 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
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
Ein Enum.UserInputType mit der letzten eingebenanzeigen.
Code-Beispiele
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
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
Code-Beispiele
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
Code-Beispiele
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.
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
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
Ein Array von Vector2 Objekten, die die Position der Finger anzeigt, die in der Gestik verwendet werden.
Der Enum.UserInputState des Gestikts.
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
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.
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
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
Ein Array von Vector2 Objekten, die die Positionen der Tasten (z. B. Finger) im Zug anzeigen.
Die Größe des Pizzagewichts von Anfang an (in Pixeln).
Die Geschwindigkeit des Pfanne-Gestells (in Pixeln) pro Sekunde.
Der Enum.UserInputState des Gestikts.
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
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
Ein Array von Vector2s, das die Bildschirmposition in Pixel anzeigt, der die Finger, die in der Poinch-Geste beteiligt sind.
Die Größe des Zooms von Anfang an Ende (in Pixeln) geteilt durch die Zoombereitstellungspositionen.
Die Geschwindigkeit des Pinzerschlusses (in Pixeln) pro Sekunde.
Der Enum.UserInputState des Gestikts.
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
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
Ein Array von Vector2s, das die Positionen der Finger anzeigt, die in der Gestik verwendet werden.
Die Anzahl der Grad, in denen sich der Gestik seit dem Start des Gestik dreht.
Die Veränderung in der Rotation (in Grad) geteilt durch die Dauer der Veränderung (in Sekunden).
Der Enum.UserInputState des Gestikts.
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
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.
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
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
Ein DirectionSwipeDirection ", das die Richtung anzeigt, in die der Benutzer geschwippt hat.
Anzahl der Berührungen (z. B. Finger), die in der Gestik verwendet werden.
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
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
Ein Array von Vector2 Objekten, die die Position der Finger anzeigt, die in der Tasten-Geste verwendet werden.
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
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
Ob der Benutzer auf ein GUI-Element tippt.
Code-Beispiele
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
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)
WindowFocused
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
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = Instance.new("RemoteEvent")
afkEvent.Name = "AfkEvent"
afkEvent.Parent = ReplicatedStorage
local function setAfk(player, afk)
if afk then
local forcefield = Instance.new("ForceField")
forcefield.Parent = player.Character
else
local forcefield = player.Character:FindFirstChildOfClass("ForceField")
if forcefield then
forcefield:Destroy()
end
end
end
afkEvent.OnServerEvent:Connect(setAfk)
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local afkEvent = ReplicatedStorage:WaitForChild("AfkEvent")
local function focusGained()
afkEvent:FireServer(false)
end
local function focusReleased()
afkEvent:FireServer(true)
end
UserInputService.WindowFocused:Connect(focusGained)
UserInputService.WindowFocusReleased:Connect(focusReleased)