Das plattformübergreifende Eingabeaktionssystem ermöglicht es Ihnen, Aktionen zu verbinden und Bindungen über verschiedene Hardware-Eingaben zur Bearbeitungszeit anzuordnen. In Kombination mit Kontexten können Sie ein modulares Eingabesystem einfach konfigurieren und bearbeiten, das auf jedem Gerät in jeder Spielphase funktioniert. Anwendungsfälle umfassen:
- Ein First-Person-Shooter-System mit Aktionen, die je nach Kampf- oder Zuschauermodus dynamisch ein- und ausgewechselt werden.
- Ein umfassendes Fahrsystem mit Beschleunigung/Abbremsung, Auto-Boostern und Tankstellen.
- Hotkeys für ein Fähigkeitssystem in einem Kampfspiel zum nahtlosen Wechseln von Bewegungen, ohne dass die Spieler einen Schlag verpassen.
Eingabekontexte
Ein InputContext ist eine Sammlung von Aktionen, die verwandte Eingabeaktionen hält, zum Beispiel PlayContext für die Steuerung von Charakteren im Spiel und NavContext für die Steuerungen zur Navigation in UI-Menüs. Sie können Kontexte aktivieren/deaktivieren (und deren entsprechende Aktionen) über die Enabled-Eigenschaft aktivieren, beispielsweise um den NavContext zu aktivieren, wenn ein Inventarmenü geöffnet ist, und dann zum PlayContext zu wechseln, wenn der Spieler das Menü schließt und zum Hauptspiel zurückkehrt.
Selbst wenn ein Spiel anfangs möglicherweise nicht mehrere Eingabekontexte verwendet, wird empfohlen, einen primären Kontext auf der obersten Ebene eines jeden Eingabesystems zu erstellen, beispielsweise die PlayContext-Instanz für Eingaben, die während des Spiels erfolgen.
- EMPFOHLENErstellen Sie einen Folder mit dem Namen Inputs innerhalb von ReplicatedStorage, um verschiedene Eingabekontexte zu halten.

Fügen Sie einen neuen InputContext in den Ordner ein und benennen Sie ihn in PlayContext um.

Stellen Sie im Eigenschaften-Fenster die Priority auf 2000 ein und aktivieren Sie Sink. Ein Kontext mit aktivierter Sink-Eigenschaft konsumiert Eingabeereignisse für seine gebundenen KeyCodes auf seiner Prioritätsstufe und blockiert diese Eingaben daran, niedrigeren Prioritätskontexten zu erreichen. Dies ist praktisch für Anwendungsfälle wie einen Inventarbildschirm, der spezifische Gameplay-Eingaben beim Öffnen unterdrücken sollte. In diesem Beispiel wird PlayContext eine hohe genug Priority zugewiesen, um seine gebundenen Eingaben zu senken, bevor die Standard-PlayerScripts-Kontexte sie verarbeiten.
Eingabeaktionen
Eine InputAction definiert eine Gameplay-Aktionsmechanik wie "Springen", "Sprinten" oder "Schießen". Diese Aktionen werden dann mit Hardware-Eingaben über Eingabebindungen zugeordnet.
Eine InputAction kann je nach ihrer Type-Eigenschaft (Enum.InputActionType) von mehreren Variationen sein. Der Standard ist Bool, das entworfen wurde, um true/false-Werte beim Drücken/Loslassen von Eingaben wie ButtonA, E oder MouseLeftButton zu empfangen.
| Eingabeaktionsart | Beispielverwendung |
|---|---|
| Bool | Ausgelöste Aktionen wie springen, schießen, sprinten usw. mit Unterstützung für gedrückt/losgelassen Schwellenwerte bei analogen Eingaben. |
| Direction1D | Variable Aktionen von null bis voll, wie das Gaspedal eines Autos oder der Zoomlevel eines Blickfeldes. |
| Direction2D | 2D-Richtungsbewegung wie Kamerarotation oder die Standardbewegung des Roblox-Charakters. |
| Direction3D | 3D-Richtungsbewegung wie ein flugfähiges Fahrzeug, das auf/ab schwebt, beschleunigt/abbremst und nach links/rechts drifft. |
| ViewportPosition | 2D-Viewport-Koordinaten wie Maussignale, zum Beispiel für benutzerdefinierte Cursors oder Raycasting zum Auswählen von Weltobjekten. |
Um eine InputAction für einfaches Sprinten des Charakters zu testen:
Erstellen Sie eine neue InputAction innerhalb des PlayContext-Kontexts in ReplicatedStorage. Benennen Sie es in CharacterSprint um, um dessen spezielle Aktion anzuzeigen.

Stellen Sie im Eigenschaften-Fenster fest, dass der Type der Aktion Bool (Standard) ist. Dies ist ein logischer Typ für einfaches Sprinten des Charakters als boolesche true/false-Aktion (der Charakter sprintet entweder oder nicht).

Eingabebindungen
Eine InputBinding definiert, welche Hardwarebindung die übergeordnete InputAction auslösen sollte, beispielsweise ein Tastendruck, ein Gamepad-Knopf oder ein Antippen auf einem touchfähigen Gerät. Um plattformspezifische Kompatibilität zu gewährleisten, sollte jede InputAction eine InputBinding für Gamepad, Tastatur/Maus und Touch haben, wie hier dargestellt.

Der Type, der der übergeordneten InputAction zugewiesen ist, beeinflusst direkt, welche allgemeinen Eingabetypen (Tasten/Knopf/Tippen, analoge Auslöser, Joystick usw.) für Kind-InputBinding-Instanzen gültig sind. Im Gegenzug hängen die Werte, die an die verbundenen Ereignisse der übergeordneten Aktion gesendet werden, von dem gewählten Eingabetyp der Bindung ab. Siehe Eingabeereignisse für Einzelheiten zur Korrelation zwischen Aktionstypen, Bindungen und Rückgabewerten.
Um Bindungen für einfaches Sprinten des Charakters zu verbinden:
Fügen Sie eine neue InputBinding in die CharacterSprint-Aktion ein und benennen Sie sie in KeyboardBinding um. Setzen Sie dann die KeyCode-Eigenschaft der Bindung auf LeftShift.


Um sicherzustellen, dass die Shift-Lock-Funktion der Maus nicht mit der Tastenbindung interferiert, wählen Sie StarterPlayer im Explorer aus und deaktivieren Sie die EnableMouseLockOption-Eigenschaft im Eigenschaften-Fenster.


Fügen Sie eine zweite InputBinding in die CharacterSprint-Aktion ein und benennen Sie sie in GamepadBinding um. Setzen Sie dann die KeyCode-Eigenschaft der Bindung auf ButtonY.


Fügen Sie in einem ScreenGui-Container innerhalb von StarterGui einen Bildschirmknopf hinzu, benennen Sie ihn in SprintButton um und positionieren/größenändern Sie ihn nach Belieben.


Fügen Sie eine dritte InputBinding in die CharacterSprint-Aktion ein und benennen Sie sie in TouchBinding um. Setzen Sie dann im Eigenschaften-Fenster die UIButton-Eigenschaft der Bindung mit der SprintButton-Schaltfläche, die Sie zuvor in StarterGui erstellt haben, in Verbindung.


Eingabeereignisse
Die InputAction-Instanz hat drei integrierte Ereignisse, um die Eingaben der Spieler, die von InputBindings kommen, zu verarbeiten.
- StateChanged — Dieses Ereignis tritt für alle Eingabeaktionstypen auf, wann immer sich der Zustand ändert, es sei denn, der Zustand versucht, in denselben Zustand überzugehen.
Je nach dem Type der Eingabeaktion (Bool, Direction1D, Direction2D, Direction3D oder ViewportPosition) und dem allgemeinen Eingabetyp, der aus einer Kind-InputBinding kommt (Taste/Knopf/Tippen, analoger Auslöser, Joystick usw.), werden unterschiedliche Werte an die Pressed, Released und StateChanged-Ereignishandler zurückgegeben. Untersuchen Sie die folgenden Tabellen, um die Korrelation besser zu verstehen.
Der Bool-Typ eignet sich am besten für ausgelöste Aktionen wie springen, schießen, sprinten usw. mit Unterstützung für gedrückt/losgelassen Schwellenwerte bei analogen Eingaben.
| Gültige Eingabetypen bei InputBindings | Zurückgegeben an die InputAction-Ereignisse |
|---|---|
| Boolesche Eingaben von Tastaturtasten oder grundlegenden Maus/Gamepad-Tasten über die KeyCode-Eigenschaft der Bindung oder einem GuiButton-Drücken/Loslassen über die UIButton-Eigenschaft der Bindung. |
|
| Variable Eingabemengen von analogen Eingaben wie Gamepad-Auslösern (ButtonL2/ButtonR2) über die KeyCode-Eigenschaft der Bindung. |
|
Um Ereignisse für einfaches Sprinten des Charakters zu verbinden:
Fügen Sie ein neues Script in den CharacterSprint-Baum neben die verschiedenen Eingabebindungen ein. Setzen Sie dann den RunContext auf Client und benennen Sie es in OnActivate um.

Fügen Sie den folgenden Code in das OnActivate-Skript ein. Beachten Sie die Verbindung des Pressed-Ereignisses in den Zeilen 13‑15, die die Gehgeschwindigkeit des Charakters verdoppelt, wenn eine Sprint-Eingabebindung gedrückt wird, und die entsprechende Verbindung des Released-Ereignisses in den Zeilen 16‑18, die die Gehgeschwindigkeit auf Standard zurücksetzt, wenn eine Sprint-Eingabebindung losgelassen wird.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)Testen Sie Ihr Spiel und testen Sie die Charakter-Sprint-Aktion mit den Bindungen, die Sie zuvor gewählt haben: LeftShift für die Tastatur, ButtonY für das Gamepad und den Bildschirm-SprintButton für touchfähige Geräte. Denken Sie daran, dass Sie den Controller Emulator verwenden können, um Gamepad-Eingaben direkt in Roblox Studio zu testen.
Kontextänderungen
Sobald Sie einen Eingabekontext wie PlayContext haben, können Sie ihn während des Spiels über Skripting aktivieren/deaktivieren, seine Priority ändern, um zu bestimmen, welche Aktionen Vorrang vor anderen haben, und Sink-Eingaben davon abhalten, innerhalb von Kontexten mit niedrigerer Priorität verarbeitet zu werden.
Um es einfacher zu machen, Kontexte aus anderen Skripten zu wechseln, fügen Sie ein neues BindableEvent in Ihren Ordner für Eingaben innerhalb von ReplicatedStorage ein und benennen Sie es in ContextEvent um.

Erstellen Sie ein neues Script auf derselben Ebene, setzen Sie dessen RunContext auf Client und benennen Sie es in UpdateContext um.

Fügen Sie den folgenden Code in das UpdateContext-Skript ein:
UpdateContext (Client Script)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Verbinde bindbares EreigniscontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContext nicht gefunden!")endend)Mit dem UpdateContext-Skript an Ort und Stelle können Sie jetzt einen benannten InputContext aktualisieren, indem Sie das bindbare Ereignis auslösen, zum Beispiel von einem LocalScript, das einen GuiButton innerhalb eines ScreenGui-Containers steuert.
Button-Skriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Fire bindbares Ereignis mit Ziel-Eingabekontext und aktivem StatuscontextEvent:Fire("PlayContext", true)end)
Standardbindungen
Roblox bietet standardmäßige Eingabebindungen für Bewegung, Kamerasteuerung und grundlegende Interaktion mit der Umgebung — Roblox-Spieler sind mit diesen Steuerungen vertraut, daher sollten Sie diese nur in bestimmten Fällen überschreiben. Bitte beachten Sie auch, dass die reservierten Eingaben nicht überschrieben werden können und immer mit ihrem vorgesehenen Zweck funktionieren.
| Aktion | Maus/Tastatur | Gamepad | Berührung |
|---|---|---|---|
| Öffne das Roblox-Menü | Esc | Start-Taste (ButtonStart) | N/A |
| Entwicklerkonsole | F9 | N/A | N/A |
| Vollbildmodus (Windows) Desktop anzeigen (Mac) | F11 | N/A | N/A |
| Video aufnehmen (Windows) | F12 | N/A | N/A |
| Bildschirmfoto aufnehmen | PrintScreen | N/A | N/A |