System Akcji Wejścia na różne platformy Input Action System pozwala na łączenie akcji i organizowanie powiązań z różnymi urządzeniami wejściowymi w czasie edycji. W połączeniu z kontekstami, możesz łatwo skonfigurować i edytować modułowy system wejścia, który działa na każdym urządzeniu w każdej fazie gry. Przykłady zastosowań obejmują:
- System strzelanki pierwszoosobowej z akcjami dynamicznie zmieniającymi się w zależności od tego, czy gracz jest w trybie walki czy trybie widza.
- Kompleksowy system prowadzenia z przyspieszeniem/hamowaniem, boosterami do samochodu i stacjami tankowania.
- Skróty klawiszowe dla systemu umiejętności w grze walki, aby płynnie wymieniać ruchy bez stracenia ciosu przez graczy.
Konteksty wejścia
InputContext jest zbiorem akcji, które zawierają powiązane akcje wejścia, na przykład PlayContext dla kontroli postaci w doświadczonym, oraz NavContext dla kontroli nawigacji po menu UI. Możesz włączać/wyłączać konteksty (i odpowiadające im akcje) za pomocą ich właściwości Enabled, na przykład aby włączyć NavContext, gdy menu inwentarza jest otwarte, a następnie zmienić na PlayContext, gdy gracz zamyka menu i wraca do głównej rozgrywki.
Nawet jeśli doświadczenie może nie używać wielu kontekstów wejścia na początku, zaleca się stworzenie głównego kontekstu na najwyższym poziomie każdego systemu wejściowego, na przykład instancji PlayContext dla wejścia, które zachodzi podczas rozgrywki.
- ZalecaneUtwórz Folder o nazwie Inputs wewnątrz ReplicatedStorage, aby przechować różne konteksty wejścia.

Wstaw nowy InputContext do folderu i zmień jego nazwę na PlayContext.

W oknie Właściwości, ustaw Priority na 2000 i włącz Sink. Kontekst z włączonym Sink pochłania zdarzenia wejściowe dla swoich powiązanych KeyCodes na swoim poziomie priorytetu, blokując te wejścia od dotarcia do kontekstów o niższym priorytecie. To jest przydatne w przypadkach, takich jak ekran inwentarza, który powinien tłumić określone wejścia rozgrywki podczas otwarcia. W tym przykładzie PlayContext ma wystarczająco wysoki Priority, aby pochłonąć swoje powiązane wejścia przed przetworzeniem ich przez domyślne konteksty PlayerScripts.
Akcje wejścia
InputAction definiuje mechanikę akcji rozgrywki, taką jak "Skok", "Bieg" czy "Strzał". Te akcje są następnie mapowane na wejścia sprzętowe za pomocą powiązań wejściowych.
InputAction może mieć kilka wariacji w zależności od swojej właściwości Type (Enum.InputActionType). Domyślnym typem jest Bool, zaprojektowany do odbierania wartości true/false na podstawie naciśnięcia/zwolnienia wejść, takich jak ButtonA, E lub MouseLeftButton.
| Typ Akcji Wejścia | Przykładowe Zastosowanie |
|---|---|
| Bool | Akcje wywoływane, takie jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na wejściach analogowych. |
| Direction1D | Zmienny zakres akcji od zera do pełnego, takich jak pedał przyspieszenia w samochodzie lub poziom powiększenia w celowniku. |
| Direction2D | Ruch kierunkowy 2D, taki jak obrót kamery lub standardowy ruch postaci w Robloxie. |
| Direction3D | Ruch kierunkowy 3D, taki jak powietrzny pojazd, który może unosić się w górę/dół, przyspieszać/hamować i dryfować w lewo/prawo. |
| ViewportPosition | Współrzędne 2D w widoku, takie jak wejście z myszy, na przykład dla niestandardowych kursorów lub raycastingu do wyboru obiektów w świecie. |
Aby przetestować InputAction do prostego biegu postaci:
Utwórz nowy InputAction wewnątrz kontekstu PlayContext w ReplicatedStorage. Zmień jego nazwę na CharacterSprint, aby wskazywała na dedykowaną akcję.

W oknie Właściwości zauważ, że typ akcji to Type to Bool (domyślnie). Jest to logiczny typ do prostego biegu postaci jako akcja boolowska true/false (postać może biec lub nie biec).

Powiązania wejściowe
InputBinding definiuje, które powiązanie sprzętowe powinno wywoływać nadrzędną InputAction, na przykład naciśnięcie klawisza, przycisk gamepada lub dotyk na urządzeniu dotykowym. Dla kompatybilności na różnych platformach, każda InputAction powinna mieć InputBinding dla gamepada, klawiatury/myszy oraz dotyku, jak pokazano tutaj.

Typ Type przypisany do nadrzędnej InputAction bezpośrednio wpływa na to, które ogólne typy wejścia (klawisz/przycisk/tapnięcie, analogowy wyzwalacz, joystick itp.) są ważne dla instancji InputBinding podrzędnych. Z kolei wartości przesyłane do połączonych zdarzeń nadrzędnej akcji zależą od wybranego typu wejścia powiązania. Zobacz zdarzenia wejściowe dla szczegółów dotyczących korelacji między typami akcji, powiązaniami i wartościami zwracanymi.
Aby podłączyć powiązania do prostego biegu postaci:
Wstaw nowy InputBinding do akcji CharacterSprint i zmień jego nazwę na KeyboardBinding. Następnie ustaw właściwość KeyCode na LeftShift.


Aby upewnić się, że blokada myszy Shift nie wpływa na powiązanie klawiatury, wybierz StarterPlayer w Eksploratorze i wyłącz EnableMouseLockOption w oknie Właściwości.


Wstaw drugi InputBinding do akcji CharacterSprint i zmień jego nazwę na GamepadBinding. Następnie ustaw właściwość KeyCode na ButtonY.


Wewnątrz kontenera ScreenGui w StarterGui, utwórz przycisk na ekranie, zmień jego nazwę na SprintButton i ustaw pozycję/rozmiar według potrzeb.


Wstaw trzeci InputBinding do akcji CharacterSprint i zmień jego nazwę na TouchBinding. Następnie, w oknie Właściwości, połącz właściwość UIButton z przyciskiem SprintButton, który wcześniej stworzyłeś wewnątrz StarterGui.


Zdarzenia wejścia
Instancja InputAction ma trzy wbudowane zdarzenia do obsługi wejścia gracza pochodzącego z InputBindings.
- StateChanged — To zdarzenie wywołuje się dla wszystkich typów akcji wejściowych, gdy tylko stan się zmienia, chyba że stan próbuje przejść do tego samego stanu.
W zależności od Type (czyli Bool, Direction1D, Direction2D, Direction3D, lub ViewportPosition) i ogólnego typu wejścia pochodzącego z InputBinding podrzędnego (klawisz/przycisk/tapnięcie, analogowy wyzwalacz, joystick itp.), różne wartości są zwracane do Pressed, Released i StateChanged obsługi zdarzeń. Zobacz poniższe tabele, aby lepiej zrozumieć korelację.
Typ Bool jest najlepszy dla wywoływanych akcji, takich jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na analogowych wejściach.
| Ważne Typy Wejścia na InputBindings | Zwrócone do Zdarzenia InputAction |
|---|---|
| Wejścia boolowskie z klawiszy klawiatury lub podstawowych przycisków myszy/gamepada przez właściwość KeyCode powiązania, lub naciśnięcie/zwolnienie GuiButton przez właściwość UIButton powiązania. |
|
| Wartości zmienne z analogowych wejść, takich jak wyzwalacze gamepada (ButtonL2/ButtonR2) przez właściwość KeyCode powiązania. |
|
Aby połączyć zdarzenia dla prostego biegu postaci:
Wstaw nowy Script do drzewa CharacterSprint, obok różnych powiązań wejściowych. Następnie ustaw jego RunContext na Client i zmień jego nazwę na OnActivate.

Wklej następujący kod do skryptu OnActivate. Zauważ, że połączenie zdarzenia Pressed na liniach 13‑15 podwaja prędkość chodzenia postaci, gdy powiązanie wejścia biegu jest naciśnięte, a odpowiadające połączenie zdarzenia Released na liniach 16‑18 resetuje prędkość chodzenia do wartości domyślnej, gdy powiązanie wejścia biegu jest zwolnione.
OnActivate (Skrypt Klienta)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)Przetestuj swoje doświadczenie i przetestuj akcję biegu postaci za pomocą powiązań, które wybrałeś wcześniej: LeftShift dla klawiatury, ButtonY dla gamepada oraz przycisku na ekranie SprintButton dla urządzeń dotykowych. Pamiętaj, że możesz użyć Emulatora Kontrolera, aby przetestować wejścia z gamepada bezpośrednio w Roblox Studio.
Zmiany kontekstu
Po utworzeniu kontekstu wejścia takiego jak PlayContext, możesz włączać/wyłączać go podczas rozgrywki poprzez skryptowanie, zmieniać jego Priority, aby określić, które akcje mają pierwszeństwo nad innymi, oraz Sink wejścia do przetwarzania w kontekstach o niższym priorytecie.
Aby ułatwić przełączanie kontekstów z innych skryptów, wstaw nowy BindableEvent do folderu wejść w ReplicatedStorage i zmień jego nazwę na ContextEvent.

Utwórz nowy Script na tym samym poziomie, ustaw jego RunContext na Client, i zmień jego nazwę na UpdateContext.

W skrypcie UpdateContext wklej następujący kod:
UpdateContext (Skrypt Klienta)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Połącz zdarzenie powiązywalnecontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("Kontekst wejścia nie znaleziony!")endend)Mając skrypt UpdateContext, możesz teraz aktualizować nazwaną InputContext, wywołując zdarzenie powiązywalne, na przykład z LocalScript, który obsługuje GuiButton wewnątrz kontenera ScreenGui.
Skrypt Przyciskulocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Wywołaj zdarzenie powiązywalne z celem kontekstu wejścia i stanem włączonymcontextEvent:Fire("PlayContext", true)end)
Domyślne powiązania
Roblox zapewnia domyślne powiązania wejściowe dla ruchu, kontroli kamery i podstawowej interakcji z otoczeniem — gracze Roblox są zaznajomieni z tymi kontrolami, więc powinieneś je nadpisać tylko w szczególnych przypadkach. Należy również pamiętać, że zarezerwowane wejścia nie mogą być nadpisywane i zawsze będą działać zgodnie ze swoim zamierzonym przeznaczeniem.
| Akcja | Mysz/Klawiatura | Gamepad | Dotyk |
|---|---|---|---|
| Otwórz menu Roblox | Esc | Start przycisk (ButtonStart) | N/D |
| Konsola dewelopera | F9 | N/D | N/D |
| Tryb pełnoekranowy (Windows) Pokaż pulpit (Mac) | F11 | N/D | N/D |
| Nagrywaj wideo (Windows) | F12 | N/D | N/D |
| Zrób zrzut ekranu | PrintScreen | N/D | N/D |