InputObject

Veraltete anzeigen

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

Nicht erstellbar

Ein Eingabeelement repräsentiert eine einzige Eingabe eines Benutzers, wie z. B. Mausbewegungen, Berührungen, Tastendrücke und mehr. Es wird erstellt, wenn eine Eingabe beginnt.

Die Eigenschaften dieses Objekts unterscheiden sich je nach UserInputType.Jede Art von Eingabe wird verschiedene Änderungen an ihrer UserInputState erfahren.Während der Lebensdauer eines Eingangs können sich andere Eigenschaften, die den Eingang weiter beschreiben, ändern, wie Position und Delta.Tastatur- und Gamepad-Tastendrücken werden die Eigenschaft KeyCode haben.

Sobald es am Beginn einer Eingabe erstellt wurde, bleibt dasselbe Objekt bestehen und wird aktualisiert, bis die Eingabe endet.Als Ergebnis kannst du die Änderungen des Objekts verfolgen, indem du das Changed-Ereignis verwendest, wenn der Benutzer die Eingabe ändert, die in Frage steht.Du kannst diese Objekte auch in eine Liste aktiver Eingänge aufnehmen und mit dem Objekt nach seiner Erstellung durch ein Ereignis wie UserInputService.InputBegan interagieren.Dies ist vor allem für Touch-Ereignisse nützlich, da jeder Touchpunkt ein separates Eingabeelement haben wird.

Siehe auch:

  • ContextActionService , die ein Eingabeelement an bound Aktion-Handlungsfunktionen übergeben
  • UserInputService , deren Ereignisse und Funktionen häufig InputObject verwenden
  • GuiObject , deren Ereignisse sich auf die Eingabe durch den Benutzer beziehen, verwenden InputObject

Code-Beispiele

Das folgende Beispiel zeigt eines von vielen Verwendungsbeispielen für die Verarbeitung von Benutzereingaben von InputBegan abhängig von seinem Typ.

InputBegonnen behandeln

-- Um das Ereignis InputBegan zu verwenden, muss der Dienst UserInputService verwendet werden
local UserInputService = game:GetService("UserInputService")
-- Eine Beispielfunktion, die mehrere Verwendungsfälle für verschiedene Arten von Benutzereingaben bietet
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)

Zusammenfassung

Eigenschaften

Eigenschaften

Delta

Parallel lesen

Code-Beispiele

Erstelle ein Fernglas-Skript

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
-- Kamera zurücksetzen auf CFrame und FieldOfView vor dem 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()
-- Kamera durch Skript ändern lassen
camera.CameraType = Enum.CameraType.Scriptable
-- Lagere Kameraproperties vor dem Zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Kamera vergrößern
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Sperre und verlangsame die Maus
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Zoomwinkel zurücksetzen
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Kamerazoom/Entzoomen umschalten
local function MouseClick()
if zoomed then
-- Kamera nicht mehr vergrößern
ResetCamera()
else
-- Kamera einzoomen
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- alles, was höher ist, würde das nach oben und nach unten schwieriger machen; empfehle alles zwischen 0~1
local smoothness = 0.05 -- empfehlen etwas zwischen 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
Parallel lesen

Code-Beispiele

Bindung unterstützter Gamepad-Tastenkombinationen

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
-- Da diese Funktion nichts zurückgibt, wird dieser Handler
-- versenke die eingabe und keine anderen aktionen-handler werden nach aufgerufen
-- diese hier.
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

Position

Parallel lesen

Code-Beispiele

InputBegonnen behandeln

-- Um das Ereignis InputBegan zu verwenden, muss der Dienst UserInputService verwendet werden
local UserInputService = game:GetService("UserInputService")
-- Eine Beispielfunktion, die mehrere Verwendungsfälle für verschiedene Arten von Benutzereingaben bietet
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)

UserInputState

Parallel lesen

Code-Beispiele

Bindung unterstützter Gamepad-Tastenkombinationen

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
-- Da diese Funktion nichts zurückgibt, wird dieser Handler
-- versenke die eingabe und keine anderen aktionen-handler werden nach aufgerufen
-- diese hier.
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

UserInputType

Parallel lesen

Code-Beispiele

InputBegonnen behandeln

-- Um das Ereignis InputBegan zu verwenden, muss der Dienst UserInputService verwendet werden
local UserInputService = game:GetService("UserInputService")
-- Eine Beispielfunktion, die mehrere Verwendungsfälle für verschiedene Arten von Benutzereingaben bietet
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)

Methoden

IsModifierKeyDown

Parameter

modifierKey: Enum.ModifierKey
Standardwert: ""

Rückgaben

Events