InputObject
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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.
-- 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
Ein Vector3, der das Delta zwischen Maus-/Joystick-Bewegungen beschreibt.
Enthält ein Enum, das die Art der verwendeten Eingabe beschreibt.
Beschreibt einen positionalen Wert dieses Eingangs.
Beschreibt den Zustand eines Eingangs, der ausgeführt wird, nach einem bestimmten Fluss, abhängig von der UserInputType.
Beschreibt die Art der Eingabe, die durchgeführt wird (Maus, Tastatur, Gamepad, Touch usw.).
Methoden
Eigenschaften
Delta
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
-- 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
KeyCode
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
-- 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
Code-Beispiele
-- 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
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
-- 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
Code-Beispiele
-- 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)