Invoeren Actiesysteem

*Deze inhoud is vertaald met behulp van AI (bèta) en kan fouten bevatten. Klik hier om deze pagina in het Engels te bekijken.

Het cross-platform Invoeren Actiesysteem stelt je in staat om acties te verbinden en bindings te rangschikken over verschillende hardware-invoeren tijdens de bewerkingstijd. In combinatie met contexten kun je eenvoudig een modulair invoersysteem configureren en bewerken dat op elk apparaat werkt in elke fase van het spel. Voorbeelden van gebruik zijn:

  • Een first-person shooter systeem waarbij acties dynamisch in- en uitgeschakeld worden, afhankelijk van of de speler in de gevechtsmodus of de toeschouwersmodus is.
  • Een uitgebreid rijdend systeem uitgerust met acceleratie/vertraging, autoboosters en tankstations.
  • Sneltoetsen voor een vaardigheden systeem in een vechtspel om bewegingen naadloos te verwisselen zonder dat spelers een klap missen.

Invoercontexten

Een InputContext is een verzameling van acties die gerelateerde invoeren acties bevat, bijvoorbeeld PlayContext voor in-game karakterbesturing en NavContext voor besturing om door UI-menu's te navigeren. Je kunt contexten in-/uitschakelen (en hun bijbehorende acties) via hun Enabled eigenschap, zoals om de NavContext in te schakelen wanneer een inventaris menu open is en vervolgens te schakelen naar de PlayContext wanneer de speler het menu sluit en terugkeert naar de primaire gameplay.

Zelfs als een spel aanvankelijk geen meerdere invoercontexten gebruikt, is het aan te raden om een primaire context op het hoogste niveau van elk invoersysteem te creëren, bijvoorbeeld de PlayContext instantie voor invoer die plaatsvindt tijdens de gameplay.

  1. AANBEVOLEN
    Maak een Folder genaamd Inputs binnen ReplicatedStorage om verschillende invoercontexten te bevatten.

    Nieuwe map binnen ReplicatedStorage, hernoemd naar Inputs
  2. Voeg een nieuwe InputContext toe aan de map en hernoem deze naar PlayContext.

    Nieuwe InputContext instantie binnen ReplicatedStorage, hernoemd naar PlayContext
  3. OPTIONEEL
    Stel in het Eigenschappen venster de Priority in op 2000 en schakel Sink in. Een context met Sink ingeschakeld verbruikt invoerevenementen voor zijn gebonden KeyCodes op zijn prioriteitsniveau, waardoor die invoeren worden geblokkeerd voor contexten met een lagere prioriteit. Dit is praktisch voor gebruiksgevallen zoals een inventaris scherm dat specifieke gameplay-invoeren moet onderdrukken terwijl het open is. In dit voorbeeld krijgt PlayContext een hoge genoeg Priority om zijn gebonden invoeren te sinken voordat de standaard PlayerScripts contexten ze verwerken.

    InputContext met Prioriteit ingesteld op 2000 en Sink ingeschakeld

Invoeracties

Een InputAction definieert een gameplay actie mechaniek zoals "Springen," "Sprinten," of "Schieten." Deze acties worden vervolgens gekoppeld aan hardware-invoeren met behulp van invoerbindings.

Een InputAction kan verschillende variaties hebben, afhankelijk van zijn Type eigenschap (Enum.InputActionType). De standaard is Bool, ontworpen om true/false waarden te ontvangen van drukken/loslaten van invoeren zoals ButtonA, E, of MouseLeftButton.

Invoer Actie TypeVoorbeeld Gebruik
BoolGeactiveerde acties zoals springen, schieten, sprinten, enz. met ondersteuning voor ingedrukte/losgelaten drempels op analoge invoeren.
Direction1DVariabele nul-tot-vol acties zoals het gaspedaal van een auto of het zoomniveau van een kijker.
Direction2D2D directionele beweging zoals camerabeweging, of de standaard Roblox karakterbeweging.
Direction3D3D directionele beweging zoals een luchtvoertuig dat omhoog/omlaag kan zweven, versnellen/vertragen, en naar links/rechts kan afdrijven.
ViewportPosition2D viewport coördinaten zoals muisinvoer, bijvoorbeeld voor aangepaste cursors of raycasting om wereldobjecten te selecteren.

Om een InputAction voor eenvoudig karakter sprinten te testen:

  1. AANBEVOLEN
    Selecteer het top-level Workspace object in de Explorer en stel vervolgens in het Eigenschappen venster de PlayerScriptsUseInputActionSystem eigenschap in op Enabled.

  2. Maak een nieuwe InputAction binnen de PlayContext context binnen ReplicatedStorage. Hernoem deze naar CharacterSprint om de specifieke actie aan te geven.

    Nieuwe InputAction instantie binnen een InputContext, hernoemd naar CharacterSprint
  3. In het Eigenschappen venster, merk op dat het type van de actie Type is Bool (standaard). Dit is een logisch type voor eenvoudig karakter sprinten als een boolean true/false actie (het karakter sprint of sprint niet).

    Type eigenschap van een InputAction ingesteld op Bool

Invoerbindings

Een InputBinding definieert welke hardwarebinding de bovenliggende InputAction moet activeren, bijvoorbeeld een toetsdruk, gamepadknop of tik op een aanraakapparaat. Voor cross-platform compatibiliteit, moet elke InputAction een InputBinding hebben voor gamepad, toetsenbord/muis, en aanraak zoals hier geïllustreerd.

Roblox biedt standaard invoerbindingen voor beweging, camerabesturing en basisinteractie met de omgeving — Roblox-spelers zijn vertrouwd met deze bedieningselementen, dus je zou ze alleen in specifieke gevallen moeten overschrijven. Houd er ook rekening mee dat de gereserveerde invoer niet kan worden overschreven en altijd zal functioneren met hun bedoelde doel.

ActieMuis/ToetsenbordGamepadAanraken
Open Roblox-menuEscStart knop (ButtonStart)N.v.t.
OntwikkelaarsconsoleF9N.v.t.N.v.t.
Volledig scherm modus (Windows)
Toon bureaublad (Mac)
F11N.v.t.N.v.t.
Video opnemen (Windows)F12N.v.t.N.v.t.
Screenshot makenPrintScreenN.v.t.N.v.t.

De Type die aan de bovenliggende InputAction is toegewezen, beïnvloedt direct welke algemene invoertypes (toets/button/tik, analoge trigger, thumbstick, enz.) geldig zijn voor kind InputBinding instanties. Op hun beurt hangen de waarden die naar de verbonden evenementen van de bovenliggende actie worden verzonden af van het gekozen invoertype van een binding. Zie invoerevenementen voor details over de correlatie tussen actie types, bindings, en retourwaarden.

Om bindings voor eenvoudig karakter sprinten aan te sluiten:

  1. Voeg een nieuwe InputBinding toe aan de CharacterSprint actie en hernoem deze naar KeyboardBinding. Stel vervolgens de KeyCode eigenschap van de binding in op LeftShift.

  2. Voeg een tweede InputBinding toe aan de CharacterSprint actie en hernoem deze naar GamepadBinding. Stel vervolgens de KeyCode eigenschap van de binding in op ButtonY.

  3. Maak binnen een ScreenGui container in StarterGui een knop op het scherm, hernoem deze naar SprintButton, en positioneer/resize deze zoals gewenst.

  4. Voeg een derde InputBinding toe aan de CharacterSprint actie en hernoem deze naar TouchBinding. Stel vervolgens in het Eigenschappen venster de UIButton eigenschap van de binding in op de SprintButton knop die je eerder hebt gemaakt binnen StarterGui.

Invoerevenementen

De InputAction instantie heeft drie ingebouwde evenementen om spelersinvoer te verwerken die afkomstig is van InputBindings.

  • Pressed — Dit evenement wordt alleen geactiveerd wanneer het invoeractie type Type is ingesteld op Bool, en alleen wanneer de status overgaat van false naar true.
  • Released — Dit evenement wordt alleen geactiveerd wanneer het invoeractie type Type is ingesteld op Bool, en alleen wanneer de status overgaat van true naar false.
  • StateChanged — Dit evenement wordt geactiveerd voor alle invoeractie types wanneer de status verandert, behalve als de status probeert over te gaan naar dezelfde status.

Afhankelijk van het invoeractie type Type (Bool, Direction1D, Direction2D, Direction3D, of ViewportPosition) en het algemene invoertype dat afkomstig is van een kind InputBinding (toets/button/tik, analoge trigger, thumbstick, enz.), worden verschillende waarden geretourneerd aan de Pressed, Released, en StateChanged evenement handlers. Bekijk de volgende tabellen om de correlatie beter te begrijpen.

Het Bool type is het beste voor geactiveerde acties zoals springen, schieten, sprinten, enz. met ondersteuning voor ingedrukte/losgelaten drempels op analoge invoeren.

Geldige Invoer Types op InputBindingsGeretourneerd aan de InputAction Evenement(en)
Boolean invoeren van toetsenbordtoetsen of basis muis/gamepad knoppen via de binding's KeyCode eigenschap, of een GuiButton druk/loslaten via de binding's UIButton eigenschap.
  • Pressed evenement:
    • true wanneer ingedrukt
  • Released evenement:
    • true wanneer losgelaten
  • StateChanged evenement:
    • true (ingedrukt) of false (losgelaten)
Variabele invoerhoeveelheden van analoge invoeren zoals gamepad triggers (ButtonL2/ButtonR2) via de binding's KeyCode eigenschap.

Om evenementen voor eenvoudig karakter sprinten aan te sluiten:

  1. Voeg een nieuwe Script toe aan de CharacterSprint boom, naast de verschillende invoerbindings. Stel vervolgens de RunContext in op Client en hernoem deze naar OnActivate.

  2. Plak de volgende code in het OnActivate script. Let op de Pressed evenementverbinding op regels 13‑15 die de loopsnelheid van het karakter verdubbelt wanneer een sprintinvoerbinding wordt ingedrukt, en de overeenkomstige Released evenementverbinding op regels 16‑18 die de loopsnelheid terugzet naar de standaardwaarde wanneer een sprintinvoerbinding wordt losgelaten.

    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. Speel je spel en test de karakter sprintactie met de bindings die je eerder hebt gekozen: LeftShift voor toetsenbord, ButtonY voor gamepad, en de op het scherm weergegeven SprintButton voor aanraakapparaten. Vergeet niet dat je de Controller Emulator kunt gebruiken om gamepadinvoeren direct in Roblox Studio te testen.

Contextwijzigingen

Zodra je een invoercontext zoals PlayContext hebt, kun je deze tijdens de gameplay in-/uitschakelen via scripting, de Priority wijzigen om te bepalen welke acties voorrang hebben boven andere, en Sink invoeren om te voorkomen dat ze worden verwerkt binnen contexten van lagere prioriteit.

  1. Om het gemakkelijker te maken om contexten vanuit andere scripts te wisselen, voeg een nieuwe BindableEvent toe aan je invoermap binnen ReplicatedStorage en hernoem deze naar ContextEvent.

  2. Maak een nieuw Script op hetzelfde niveau, stel de RunContext in op Client, en hernoem deze naar UpdateContext.

  3. Plak de volgende code in het UpdateContext script:

    UpdateContext (Client Script)
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- Verbind bindbare gebeurtenis
    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 niet gevonden!")
    end
    end)
  4. Met het UpdateContext script op zijn plaats, kun je nu een genaamde InputContext bijwerken door de bindbare gebeurtenis te activeren, bijvoorbeeld vanuit een LocalScript die een GuiButton aanstuurt binnen een ScreenGui container.

    Button Script
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Activeer bindbare gebeurtenis met doel invoercontext en ingeschakelde status
    contextEvent:Fire("PlayContext", true)
    end)

Weergeven van bindings

Zodra je acties en bindings hebt ingesteld, moet je doorgaans spelers laten zien, via op het scherm weergegeven ondersteunende hints, welke toets of knop elke actie activeert:


Het Invoeren Actiesysteem biedt twee benaderingen:

  • AANBEVOLEN
    InputActionLabel — Een no-code, drag-and-drop GuiObject dat automatisch de juiste invoer per platform weergeeft.
  • INTERMEDIAIR
    PreferredBinding — Een alleen-lezen InputAction eigenschap voor makers die volledige controle willen over hoe bindings in aangepaste UI worden weergegeven.

InputActionLabel is een GuiObject dat je kunt invoegen in elke ScreenGui of SurfaceGui. Zodra de InputAction eigenschap is ingesteld om te verwijzen naar een bestaande InputAction instantie, lost het automatisch de juiste toetsbinding op voor het huidige invoerapparaat van de speler — geen scripting vereist. Wanneer de speler van apparaat wisselt (bijvoorbeeld, een gamepad oppakken na het gebruik van een toetsenbord) of een bediening opnieuw toewijst, wordt het label onmiddellijk bijgewerkt.

Om een InputActionLabel toe te voegen:

  1. Binnen een ScreenGui container in StarterGui, voeg een InputActionLabel toe zoals elke andere GuiObject.

  2. Stel in het Eigenschappen venster de InputAction eigenschap in op de InputAction instantie die je wilt weergeven (bijvoorbeeld, je "Sprint" actie onder ReplicatedStorage) en positioneer/resize het zoals gewenst.

  3. Wanneer het label oplost wat het moet weergeven, controleert het het volgende in volgorde:

    1. Aangepaste Afbeeldingen — Als kind InputBindings hun DisplayImage eigenschap hebben ingesteld, rendert het label die afbeeldingen direct.

    2. Platform Toets Afbeeldingen — Bij gebrek aan aangepaste afbeeldingen, rendert het label platform-geleverde afbeeldingen voor kind InputBindings via UserInputService:GetImageForKeyCode(), als dergelijke afbeeldingen beschikbaar zijn. Samengestelde bindings met modifiers tonen meerdere pictogrammen met + scheidingstekens.

    3. Aangepaste Namen — Bij gebrek aan beschikbare afbeeldingen, als kind InputBindings hun DisplayName eigenschap hebben ingesteld, rendert het label die tekst met behulp van de stijl eigenschappen van het label.

    4. Platform Toets Strings — Bij gebrek aan al het bovenstaande, rendert het label platform-geleverde strings via UserInputService:GetStringForKeyCode().

    5. Als er geen InputAction is toegewezen of er geen kind InputBinding bestaat, rendert het label een placeholder pictogram.

Invoeren Actie Manager

De Invoeren Actie Manager tool is een uniforme, matrix-achtige interface om je invoerarchitectuur te ontwerpen, te controleren en op te schalen.

Om toegang te krijgen, navigeer naar het Venster menu in Studio en selecteer Invoer ⟩ Invoeren Actie Manager. Als je spel al invoer contexten, acties, of bindings gebruikt, zal de manager automatisch het DataModel scannen en die bestaande instanties in de editor grid extraheren. Nieuwe invoer-gerelateerde instanties worden automatisch toegevoegd aan een Inputs map binnen ReplicatedStorage.

Map binnen ReplicatedStorage genaamd Inputs

Om een invoeropstelling voor karakter sprint te configureren zoals beschreven in de bovenstaande secties:

  1. AANBEVOLEN
    Selecteer het top-level Workspace object in de Explorer en stel vervolgens in het Eigenschappen venster de PlayerScriptsUseInputActionSystem eigenschap in op Enabled.

  2. Maak binnen een ScreenGui container in StarterGui een knop op het scherm, hernoem deze naar SprintButton, en positioneer/resize deze zoals gewenst.

  3. In de Invoeren Actie Manager, beweeg over de Context kolomkop en klik op de + knop. Voer een geschikte naam in voor de nieuwe context zoals PlayContext en druk op Enter. Een InputContext van de bijpassende naam verschijnt in ReplicatedStorage.

    Nieuwe InputContext instantie binnen ReplicatedStorage genaamd PlayContext
  4. Beweeg over de nieuwe context en klik op de + knop. Selecteer uit het pop-upmenu Bool, voer CharacterSprint in voor de naam van de actie, en druk op Enter. Een InputAction van de bijpassende naam verschijnt onder de context.

    Nieuwe InputAction instantie binnen een InputContext genaamd CharacterSprint
  5. Wijs in de nieuwe CharacterSprint rij bindings toe voor elk invoertype:

    1. Toetsenbord en Muis — Klik op de pijlknop en selecteer LeftShift uit het keuzemenu.
    2. Aanraak — Klik op de cel en klik vervolgens in de Explorer hiërarchie op het SprintButton object dat je eerder in de ScreenGui hebt ingevoegd.
    3. Gamepad — Klik op de pijlknop en selecteer ButtonY uit het keuzemenu.
  6. Voeg een nieuwe Script toe aan de CharacterSprint boom, naast de verschillende invoerbindings. Stel vervolgens de RunContext in op Client en hernoem deze naar OnActivate.

  7. Plak de volgende code in het OnActivate script. Let op de Pressed evenementverbinding op regels 13‑15 die de loopsnelheid van het karakter verdubbelt wanneer een sprintinvoerbinding wordt ingedrukt, en de overeenkomstige Released evenementverbinding op regels 16‑18 die de loopsnelheid terugzet naar de standaardwaarde wanneer een sprintinvoerbinding wordt losgelaten.

    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, het Roblox-logo en Powering Imagination behoren tot onze geregistreerde en niet-geregistreerde handelsmerken in de VS en andere landen.