System Akcji Wejściowych na różnych platformach pozwala na łączenie akcji i organizowanie powiązań w różnych urządzeniach wejściowych w czasie edycji. W połączeniu z kontekstami, możesz łatwo skonfigurować i edytować modułowy system wejściowy, 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 w trybie widza.
- Kompletne systemy jazdy wyposażone w przyspieszenie/hamowanie, boostery samochodowe i stacje tankowania.
- Skróty klawiszowe dla systemu umiejętności w grze walki, aby płynnie wymieniać ruchy bez przegapienia ciosu przez graczy.
Konteksty wejściowe
InputContext to zbiór akcji, który zawiera powiązane akcje wejściowe, na przykład PlayContext dla kontroli postaci w grze i NavContext dla kontroli nawigacji po menu UI. Możesz włączać/wyłączać konteksty (i odpowiadające im akcje) za pomocą właściwości Enabled, na przykład, aby włączyć NavContext, gdy menu inwentarza jest otwarte, a następnie przełączyć się na PlayContext, gdy gracz zamyka menu i wraca do głównej rozgrywki.
Nawet jeśli gra początkowo nie używa wielu kontekstów wejściowych, zaleca się utworzenie głównego kontekstu na najwyższym poziomie każdego systemu wejściowego, na przykład instancji PlayContext dla wejścia, które występuje podczas rozgrywki.
- ZalecaneUtwórz Folder o nazwie Inputs wewnątrz ReplicatedStorage, aby przechować różne konteksty wejściowe.

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

- OpcjonalneW oknie Właściwości ustaw Priority na 2000 i włącz Sink. Kontekst z włączonym Sink konsumuje zdarzenia wejściowe dla swoich powiązanych KeyCodes na swoim poziomie priorytetu, blokując te wejścia przed dotarciem do kontekstów o niższym priorytecie. Jest to praktyczne w przypadku takich zastosowań jak ekran inwentarza, który powinien tłumić konkretne wejścia rozgrywki podczas otwarcia. W tym przykładzie PlayContext ma wystarczająco wysoki Priority, aby zablokować swoje powiązane wejścia przed przetworzeniem ich przez domyślne konteksty PlayerScripts.

Akcje wejściowe
InputAction definiuje mechanikę akcji rozgrywki, taką jak "Skok", "Bieg" lub "Strzał". Te akcje są następnie mapowane na urządzenia wejściowe za pomocą powiązań wejściowych.
InputAction może mieć kilka wariantów w zależności od właściwości Type (Enum.InputActionType). Domyślnym typem jest Bool, zaprojektowany do odbierania wartości true/false z naciśnięcia/zwolnienia wejść, takich jak ButtonA, E lub MouseLeftButton.
| Typ Akcji Wejściowej | Przykład Użycia |
|---|---|
| Bool | Akcje wyzwalane, takie jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na wejściach analogowych. |
| Direction1D | Zmienne akcje od zera do pełnej, takie jak pedał przyspieszenia samochodu lub poziom powiększenia w celowniku. |
| Direction2D | 2D ruch kierunkowy, taki jak obrót kamery lub standardowy ruch postaci w Robloxie. |
| Direction3D | 3D ruch kierunkowy, jak pojazd w powietrzu, który może unosić się w górę/dół, przyspieszać/hamować i dryfować w lewo/prawo. |
| ViewportPosition | 2D współrzędne 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 dla prostego biegu postaci:
- ZalecaneWybierz obiekt Workspace na najwyższym poziomie w Eksploratorze, a następnie w oknie Właściwości ustaw właściwość PlayerScriptsUseInputActionSystem na Enabled.
Utwórz nowy InputAction wewnątrz kontekstu PlayContext w ReplicatedStorage. Zmień jego nazwę na CharacterSprint, aby wskazać jego dedykowaną akcję.

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

Powiązania wejściowe
InputBinding definiuje, które powiązanie sprzętowe powinno wyzwalać rodzica InputAction, na przykład naciśnięcie klawisza, przycisk kontrolera lub dotyk na urządzeniu obsługującym dotyk. Dla kompatybilności międzyplatformowej każdy InputAction powinien mieć InputBinding dla kontrolera, klawiatury/myszy i dotyku, jak pokazano tutaj.

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 |
Właściwość Type przypisana do rodzica InputAction bezpośrednio wpływa na to, które ogólne typy wejść (klawisz/przycisk/naciśnięcie, analogowy spust, gałka analogowa itp.) są ważne dla instancji dziecka InputBinding. Z kolei wartości wysyłane do połączonych zdarzeń akcji rodzica zależą od wybranego typu wejścia powiązania. Zobacz zdarzenia wejściowe w celu uzyskania szczegółów dotyczących korelacji między typami akcji, powiązaniami i wartościami zwracanymi.
Aby podłączyć powiązania dla prostego biegu postaci:
Wstaw nowy InputBinding do akcji CharacterSprint i zmień jego nazwę na KeyboardBinding. Następnie ustaw właściwość KeyCode powiązania na LeftShift.


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


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


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 powiązania z przyciskiem SprintButton, który utworzyłeś wcześniej wewnątrz StarterGui.


Zdarzenia wejściowe
Instancja InputAction ma trzy wbudowane zdarzenia do obsługi wejścia gracza pochodzącego z InputBindings.
- StateChanged — To zdarzenie wyzwala się dla wszystkich typów akcji wejściowych, gdy tylko stan się zmienia, z wyjątkiem sytuacji, gdy stan próbuje przejść do tego samego stanu.
W zależności od Type akcji wejściowej (Bool, Direction1D, Direction2D, Direction3D lub ViewportPosition) oraz ogólnego typu wejścia pochodzącego z dziecka InputBinding (klawisz/przycisk/naciśnięcie, analogowy spust, gałka analogowa itp.), różne wartości są zwracane do Pressed, Released i StateChanged handlerów zdarzeń. Zbadaj poniższe tabele, aby lepiej zrozumieć korelację.
Typ Bool jest najlepszy dla wyzwalanych akcji, takich jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na wejściach analogowych.
| Ważne Typy Wejść na InputBindings | Zwracane do Zdarzenia InputAction |
|---|---|
| Wejścia boolean z klawiszy klawiatury lub podstawowych przycisków myszy/kontrolera przez właściwość KeyCode powiązania, lub naciśnięcie/zwolnienie GuiButton przez właściwość UIButton powiązania. |
|
| Zmienne ilości wejść z analogowych wejść, takich jak spusty kontrolera (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ń nazwę na OnActivate.

Wklej poniższy kod do skryptu OnActivate. Zauważ połączenie zdarzenia Pressed w linijkach 13‑15, które podwaja prędkość chodzenia postaci, gdy naciśnięte jest powiązanie wejścia sprintu, oraz odpowiadające połączenie zdarzenia Released w linijkach 16‑18, które resetuje prędkość chodzenia do domyślnej, gdy powiązanie wejścia sprintu 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 swoją grę i przetestuj akcję biegu postaci z powiązaniami, które wybrałeś wcześniej: LeftShift dla klawiatury, ButtonY dla kontrolera i przycisk na ekranie SprintButton dla urządzeń obsługujących dotyk. Pamiętaj, że możesz użyć Emulatora Kontrolera, aby przetestować wejścia kontrolera bezpośrednio w Roblox Studio.
Zmiany kontekstu
Gdy masz kontekst wejściowy taki jak PlayContext, możesz włączać/wyłączać go podczas rozgrywki za pomocą skryptów, zmieniać jego Priority, aby określić, które akcje mają pierwszeństwo przed innymi, oraz Sink, aby zablokować przetwarzanie wejść w kontekstach o niższym priorytecie.
Aby ułatwić przełączanie kontekstów z innych skryptów, wstaw nowy BindableEvent do folderu wejściowego w ReplicatedStorage i zmień jego nazwę na ContextEvent.

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

Wewnątrz skryptu UpdateContext wklej poniższy kod:
UpdateContext (Skrypt Klienta)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Połącz zdarzenie bindablecontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("Kontekst wejściowy nie znaleziony!")endend)Z skryptem UpdateContext w miejscu, możesz teraz zaktualizować nazwany InputContext, wywołując zdarzenie bindable, na przykład z LocalScript, który zasila 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 bindable z docelowym kontekstem wejściowym i stanem włączonymcontextEvent:Fire("PlayContext", true)end)
Wyświetlanie powiązań
Gdy skonfigurujesz akcje i powiązania, zazwyczaj będziesz musiał pokazać graczom, za pomocą na‑ekranowych podpowiedzi asystujących, który klawisz lub przycisk wyzwala każdą akcję:

System Akcji Wejściowych oferuje dwa podejścia:
- ZalecaneInputActionLabel — Obiekt GuiObject bez kodu, który automatycznie wyświetla poprawne wejście dla każdej platformy.
- ŚredniePreferredBinding — Właściwość InputAction tylko do odczytu dla twórców, którzy chcą mieć pełną kontrolę nad tym, jak powiązania są wyświetlane w niestandardowym UI.
InputActionLabel to GuiObject, który możesz wstawić do dowolnego ScreenGui lub SurfaceGui. Gdy jego właściwość InputAction jest ustawiona na odniesienie do istniejącej instancji InputAction, automatycznie rozwiązuje i wyświetla poprawne powiązanie klawisza dla aktualnego urządzenia wejściowego gracza — bez potrzeby skryptowania. Gdy gracz przełącza urządzenia (na przykład, podnosząc kontroler po użyciu klawiatury) lub zmienia przypisanie kontroli, etykieta aktualizuje się natychmiast.
Aby dodać InputActionLabel:
Wewnątrz kontenera ScreenGui w StarterGui, wstaw InputActionLabel tak jak każdy inny GuiObject.
W oknie Właściwości ustaw jego właściwość InputAction na instancję InputAction, którą chcesz wyświetlić (na przykład, twoją akcję "Sprint" w ReplicatedStorage) i ustaw pozycję/rozmiar według uznania.
Gdy etykieta rozwiązuje, co wyświetlić, sprawdza następujące w kolejności:
Niestandardowe Obrazy — Jeśli dzieci InputBindings mają ustawioną właściwość DisplayImage, etykieta renderuje te obrazy bezpośrednio.
Obrazy Klawiszy Platformy — Brakując niestandardowych obrazów, etykieta renderuje obrazy dostarczone przez platformę dla dzieci InputBindings przez UserInputService:GetImageForKeyCode(), jeśli takie obrazy są dostępne. Złożone powiązania z modyfikatorami pokazują wiele ikon z separatorami +.
Niestandardowe Nazwy — Brakując dostępnych obrazów, jeśli dzieci InputBindings mają ustawioną właściwość DisplayName, etykieta renderuje ten tekst, używając właściwości stylu etykiety.
Platformowe Napisy Klawiszy — Brakując wszystkiego powyżej, etykieta renderuje napisy dostarczone przez platformę przez UserInputService:GetStringForKeyCode().
Jeśli żadna InputAction nie jest przypisana lub nie istnieje żadne dziecko InputBinding, etykieta renderuje ikonę zastępczą.
Menedżer Akcji Wejściowych
Menedżer Akcji Wejściowych to zintegrowany, matrycowy interfejs do projektowania, audytowania i skalowania architektury wejściowej.
Aby uzyskać do niego dostęp, przejdź do menu Okno w Studio i wybierz Wejście ⟩ Menedżer Akcji Wejściowych. Jeśli twoja gra już używa wejściowych kontekstów, akcji lub powiązań, menedżer automatycznie przeskanuje DataModel i wyodrębni te istniejące instancje do siatki edytora. Jakiekolwiek nowe instancje związane z wejściem będą automatycznie populowane do folderu Inputs w ReplicatedStorage.

Aby skonfigurować ustawienie wejścia dla biegu postaci zgodnie z opisanymi powyżej sekcjami:
- ZalecaneWybierz obiekt Workspace na najwyższym poziomie w Eksploratorze, a następnie w oknie Właściwości ustaw właściwość PlayerScriptsUseInputActionSystem na Enabled.
Wewnątrz kontenera ScreenGui w StarterGui, utwórz przycisk na ekranie, zmień jego nazwę na SprintButton i ustaw pozycję/rozmiar według uznania.

W Menedżerze Akcji Wejściowych, najedź na nagłówek kolumny Kontekst i kliknij przycisk +. Wprowadź odpowiednią nazwę dla nowego kontekstu, taką jak PlayContext, i naciśnij Enter. Instancja InputContext o pasującej nazwie pojawia się w ReplicatedStorage.


Najedź na nowy kontekst i kliknij przycisk +. Z menu podręcznego wybierz Bool, wprowadź CharacterSprint jako nazwę akcji i naciśnij Enter. Instancja InputAction o pasującej nazwie pojawia się pod kontekstem.


W nowym wierszu CharacterSprint przypisz powiązania dla każdego typu wejścia:
- Klawiatura i Mysz — Kliknij przycisk strzałki i wybierz LeftShift z menu wyboru.
- Dotyk — Kliknij komórkę, a następnie w hierarchii Eksploratora kliknij obiekt SprintButton, który wcześniej wstawiłeś do ScreenGui.
- Kontroler — Kliknij przycisk strzałki i wybierz ButtonY z menu wyboru.

Wstaw nowy Script do drzewa CharacterSprint, obok różnych powiązań wejściowych. Następnie ustaw jego RunContext na Client i zmień nazwę na OnActivate.

Wklej poniższy kod do skryptu OnActivate. Zauważ połączenie zdarzenia Pressed w linijkach 13‑15, które podwaja prędkość chodzenia postaci, gdy naciśnięte jest powiązanie wejścia sprintu, oraz odpowiadające połączenie zdarzenia Released w linijkach 16‑18, które resetuje prędkość chodzenia do domyślnej, gdy powiązanie wejścia sprintu 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)