Eingabeaktionssystem

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

Das plattformübergreifende Eingabeaktionssystem ermöglicht es Ihnen, Aktionen zu verbinden und Bindungen über verschiedene Hardwareeingaben 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 sind unter anderem:

  • Ein First-Person-Shooter-System, bei dem Aktionen dynamisch je nach Spielmodus des Spielers (Kampfmodus oder Zuschauermodus) ein- und ausgewechselt werden.
  • Ein umfassendes Fahrsystem mit Beschleunigung/Verzögerung, Auto-Boostern und Tankstellen.
  • Hotkeys für ein Fähigkeitssystem in einem Kampfspiel, um Bewegungen nahtlos auszutauschen, ohne dass die Spieler einen Schlag verpassen.

Eingabekontexte

Ein InputContext ist eine Sammlung von Aktionen, die verwandte Eingabeaktionen enthält, zum Beispiel PlayContext für die Steuerung von Charakteren im Spiel und NavContext für die Steuerung der 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 keine mehreren Eingabekontexte verwendet, wird empfohlen, einen primären Kontext auf der obersten Ebene eines jeden Eingabesystems zu erstellen, zum Beispiel die PlayContext-Instanz für Eingaben, die während des Spiels erfolgen.

  1. EMPFOHLEN
    Erstellen Sie einen Folder mit dem Namen Inputs innerhalb von ReplicatedStorage, um verschiedene Eingabekontexte zu halten.

    Neuer Ordner innerhalb von ReplicatedStorage, umbenannt in Inputs
  2. Fügen Sie einen neuen InputContext in den Ordner ein und benennen Sie ihn in PlayContext um.

    Neue InputContext-Instanz innerhalb von ReplicatedStorage, umbenannt in PlayContext
  3. OPTIONAL
    Stellen Sie im Eigenschaften-Fenster die Priority auf 2000 ein und aktivieren Sie Sink. Ein Kontext mit aktivierter Sink-Eigenschaft verbraucht Eingabeereignisse für seine gebundenen KeyCodes auf seiner Prioritätsebene und blockiert diese Eingaben, damit sie nicht in Kontexte mit niedrigerer Priorität gelangen. Dies ist praktisch für Anwendungsfälle wie einen Inventarbildschirm, der spezifische Gameplay-Eingaben unterdrücken sollte, während er geöffnet ist. In diesem Beispiel erhält PlayContext eine ausreichend hohe Priority, um seine gebundenen Eingaben zu sinken, bevor die Standardkontexte PlayerScripts sie verarbeiten.

    InputContext mit auf 2000 gesetzter Priorität und aktivierter Sink-Funktion

Eingabeaktionen

Eine InputAction definiert eine Gameplay-Aktionsmechanik wie "Springen", "Sprinten" oder "Schießen". Diese Aktionen werden dann über Eingabebindungen auf Hardwareeingaben abgebildet.

Eine InputAction kann je nach ihrer Type-Eigenschaft (Enum.InputActionType) verschiedene Variationen aufweisen. Der Standardwert ist Bool, der dafür ausgelegt ist, true/false-Werte von Drücken/Loslassen von Eingaben wie ButtonA, E oder MouseLeftButton zu empfangen.

EingabeaktionsartBeispielverwendung
BoolAusgelöste Aktionen wie Springen, Schießen, Sprinten usw. mit Unterstützung für gedrückte/losgelassene Schwellenwerte bei analogen Eingaben.
Direction1DVariable Null-zu-Voll-Aktionen wie das Gaspedal eines Autos oder der Zoomlevel eines Sichtbereichs.
Direction2D2D-Richtungsbewegung wie Kamerarotation oder die Standardbewegung des Roblox-Charakters.
Direction3D3D-Richtungsbewegung wie ein fliegendes Fahrzeug, das auf- und absteigen, beschleunigen/abbremsen und nach links/rechts driften kann.
ViewportPosition2D-Viewport-Koordinaten wie Maus-Eingaben, z. B. für benutzerdefinierte Cursors oder Raycasting, um Weltobjekte auszuwählen.

Um eine InputAction für einfaches Sprinten des Charakters zu testen:

  1. EMPFOHLEN
    Wählen Sie das oberste Workspace-Objekt im Explorer aus und setzen Sie dann im Eigenschaften-Fenster die PlayerScriptsUseInputActionSystem-Eigenschaft auf Enabled.

  2. Erstellen Sie eine neue InputAction innerhalb des PlayContext-Kontexts in ReplicatedStorage. Benennen Sie sie in CharacterSprint um, um ihre spezifische Aktion anzuzeigen.

    Neue InputAction-Instanz innerhalb eines InputContext, umbenannt in CharacterSprint
  3. Stellen Sie im Eigenschaften-Fenster fest, dass der Typ der Aktion Type auf Bool (Standard) gesetzt ist. Dies ist ein logischer Typ für einfaches Sprinten des Charakters als boolesche true/false-Aktion (der Charakter sprintet entweder oder nicht).

    Typ-Eigenschaft einer InputAction auf Bool gesetzt

Eingabebindungen

Eine InputBinding definiert, welche Hardwarebindung die übergeordnete InputAction auslösen sollte, z. B. ein Tastendruck, ein Gamepad-Button oder ein Tippen auf einem berührungsempfindlichen Gerät. Für die plattformspezifische Kompatibilität sollte jede InputAction eine InputBinding für Gamepad, Tastatur/Maus und Berührung haben, wie hier dargestellt.

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.

AktionMaus/TastaturGamepadBerührung
Öffne das Roblox-MenüEscStart-Taste (ButtonStart)N/A
EntwicklerkonsoleF9N/AN/A
Vollbildmodus (Windows)
Desktop anzeigen (Mac)
F11N/AN/A
Video aufnehmen (Windows)F12N/AN/A
Bildschirmfoto aufnehmenPrintScreenN/AN/A

Die Type, die der übergeordneten InputAction zugewiesen ist, beeinflusst direkt, welche allgemeinen Eingabetypen (Taste/Knopf/Tipp, analoger Trigger, Daumenstick usw.) für untergeordnete 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 einer Bindung ab. Siehe Eingabeereignisse für Details zur Korrelation zwischen Aktionstypen, Bindungen und Rückgabewerten.

Um Bindungen für einfaches Sprinten des Charakters einzurichten:

  1. 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.

  2. 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.

  3. Erstellen Sie innerhalb eines ScreenGui-Containers in StarterGui einen Bildschirmbutton, benennen Sie ihn in SprintButton um und positionieren/größeren Sie ihn nach Wunsch.

  4. 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 auf den SprintButton, den Sie zuvor innerhalb von StarterGui erstellt haben.

Eingabeereignisse

Die InputAction-Instanz hat drei integrierte Ereignisse, um die Eingaben der Spieler zu verarbeiten, die von InputBindings kommen.

  • Pressed — Dieses Ereignis wird nur ausgelöst, wenn der Typ der Eingabeaktion auf Bool gesetzt ist und nur, wenn der Zustand von false auf true wechselt.
  • Released — Dieses Ereignis wird nur ausgelöst, wenn der Typ der Eingabeaktion auf Bool gesetzt ist und nur, wenn der Zustand von true auf false wechselt.
  • StateChanged — Dieses Ereignis wird für alle Eingabeaktionstypen ausgelöst, wann immer sich der Zustand ändert, es sei denn, der Zustand versucht, in denselben Zustand zu wechseln.

Je nach Type der Eingabeaktion (Bool, Direction1D, Direction2D, Direction3D oder ViewportPosition) und dem allgemeinen Eingabetyp, der von einer untergeordneten InputBinding kommt (Taste/Knopf/Tipp, analoger Trigger, Daumenstick 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 Typ Bool eignet sich am besten für ausgelöste Aktionen wie Springen, Schießen, Sprinten usw. mit Unterstützung für gedrückte/losgelassene Schwellenwerte bei analogen Eingaben.

Gültige Eingabetypen auf InputBindingsZurückgegeben an die InputAction-Ereignisse
Boolean-Eingaben von Tastaturtasten oder grundlegenden Maus-/Gamepad-Tasten über die KeyCode-Eigenschaft der Bindung oder einen GuiButton-Druck/Loslassen über die UIButton-Eigenschaft der Bindung.
  • Pressed-Ereignis:
    • true, wenn gedrückt
  • Released-Ereignis:
    • true, wenn losgelassen
  • StateChanged-Ereignis:
    • true (gedrückt) oder false (losgelassen)
Variable Eingabemengen von analogen Eingaben wie Gamepad-Trigger (ButtonL2/ButtonR2) über die KeyCode-Eigenschaft der Bindung.

Um Ereignisse für einfaches Sprinten des Charakters zu verbinden:

  1. Fügen Sie ein neues Script in den CharacterSprint-Baum ein, neben den verschiedenen Eingabebindungen. Setzen Sie dann den RunContext auf Client und benennen Sie es in OnActivate um.

  2. Fügen Sie den folgenden Code in das OnActivate-Skript ein. Beachten Sie die Verbindung des Pressed-Ereignisses in den Zeilen 1315, die die Gehgeschwindigkeit des Charakters verdoppelt, wenn eine Sprint-Eingabebindung gedrückt wird, und die entsprechende Verbindung des Released-Ereignisses in den Zeilen 1618, die die Gehgeschwindigkeit auf den Standardwert zurücksetzt, wenn eine Sprint-Eingabebindung losgelassen wird.

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. Testen Sie Ihr Spiel und testen Sie die Charakter-Sprint-Aktion mit den Bindungen, die Sie zuvor ausgewählt haben: LeftShift für die Tastatur, ButtonY für das Gamepad und den Bildschirm-SprintButton für berührungsempfindliche 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 daran hindern, innerhalb von Kontexten mit niedrigerer Priorität verarbeitet zu werden.

  1. Um es einfacher zu machen, Kontexte von anderen Skripten aus zu wechseln, fügen Sie ein neues BindableEvent in Ihren Eingaben-Ordner innerhalb von ReplicatedStorage ein und benennen Sie es in ContextEvent um.

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

  3. Fügen Sie im UpdateContext-Skript den folgenden Code ein:

    UpdateContext (Client Script)
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- Verbinden Sie das bindbare Ereignis
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContext nicht gefunden!")
    end
    end)
  4. Mit dem UpdateContext-Skript können Sie jetzt einen benannten InputContext aktualisieren, indem Sie das bindbare Ereignis auslösen, beispielsweise von einem LocalScript, das einen GuiButton innerhalb eines ScreenGui-Containers steuert.

    Button-Skript
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Fire bindbares Ereignis mit Ziel-Eingabekontext und aktivem Zustand
    contextEvent:Fire("PlayContext", true)
    end)

Eingabeaktionsmanager

Das Eingabeaktionsmanager-Tool ist eine einheitliche, matrixartige Schnittstelle zur Gestaltung, Überprüfung und Skalierung Ihrer Eingabearchitektur.

Um darauf zuzugreifen, navigieren Sie zum Fenster-Menü in Studio und wählen Sie Eingabe ⟩ Eingabeaktionsmanager. Wenn Ihr Spiel bereits Eingabe- Kontexte, Aktionen oder Bindungen verwendet, scannt der Manager automatisch das DataModel und extrahiert diese vorhandenen Instanzen in das Editor-Raster. Alle neuen eingabebezogenen Instanzen werden automatisch in einen Inputs-Ordner innerhalb von ReplicatedStorage eingefügt.

Ordner innerhalb von ReplicatedStorage mit dem Namen Inputs

Um ein Eingabesetup für Charakter Sprint gemäß den oben beschriebenen Abschnitten zu konfigurieren:

  1. EMPFOHLEN
    Wählen Sie das oberste Workspace-Objekt im Explorer aus und setzen Sie dann im Eigenschaften-Fenster die PlayerScriptsUseInputActionSystem-Eigenschaft auf Enabled.

  2. Erstellen Sie innerhalb eines ScreenGui-Containers in StarterGui einen Bildschirmbutton, benennen Sie ihn in SprintButton um und positionieren/größeren Sie ihn nach Wunsch.

  3. Im Eingabeaktionsmanager fahren Sie mit der Maus über die Kontext-Spaltenüberschrift und klicken Sie auf die -Schaltfläche. Geben Sie einen geeigneten Namen für den neuen Kontext ein, z. B. PlayContext, und drücken Sie Enter. Eine InputContext mit dem entsprechenden Namen erscheint in ReplicatedStorage.

    Neue InputContext-Instanz innerhalb von ReplicatedStorage mit dem Namen PlayContext
  4. Fahren Sie mit der Maus über den neuen Kontext und klicken Sie auf die -Schaltfläche. Wählen Sie im Popup-Menü Bool, geben Sie CharacterSprint für den Aktionsnamen ein und drücken Sie Enter. Eine InputAction mit dem entsprechenden Namen erscheint unter dem Kontext.

    Neue InputAction-Instanz innerhalb eines InputContext mit dem Namen CharacterSprint
  5. Weisen Sie in der neuen CharacterSprint-Zeile Bindungen für jeden Eingabetyp zu:

    1. Tastatur und Maus — Klicken Sie auf die Pfeiltaste und wählen Sie LeftShift aus dem Auswahlmenü.
    2. Berührung — Klicken Sie auf die Zelle und klicken Sie dann im Explorer-Hierarchie auf das SprintButton-Objekt, das Sie zuvor in das ScreenGui eingefügt haben.
    3. Gamepad — Klicken Sie auf die Pfeiltaste und wählen Sie ButtonY aus dem Auswahlmenü.
  6. Fügen Sie ein neues Script in den CharacterSprint-Baum ein, neben den verschiedenen Eingabebindungen. Setzen Sie dann den RunContext auf Client und benennen Sie es in OnActivate um.

  7. Fügen Sie den folgenden Code in das OnActivate-Skript ein. Beachten Sie die Verbindung des Pressed-Ereignisses in den Zeilen 1315, die die Gehgeschwindigkeit des Charakters verdoppelt, wenn eine Sprint-Eingabebindung gedrückt wird, und die entsprechende Verbindung des Released-Ereignisses in den Zeilen 1618, die die Gehgeschwindigkeit auf den Standardwert zurücksetzt, wenn eine Sprint-Eingabebindung losgelassen wird.

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.