System Akcji Wejściowych

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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.

  1. Zalecane
    Utwórz Folder o nazwie Inputs wewnątrz ReplicatedStorage, aby przechować różne konteksty wejściowe.

    Nowy folder w ReplicatedStorage, przemianowany na Inputs
  2. Wstaw nowy InputContext do folderu i zmień jego nazwę na PlayContext.

    Nowa instancja InputContext w ReplicatedStorage, przemianowana na PlayContext
  3. Opcjonalne
    W 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.

    InputContext z priorytetem ustawionym na 2000 i włączonym Sink

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ściowejPrzykład Użycia
BoolAkcje wyzwalane, takie jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na wejściach analogowych.
Direction1DZmienne akcje od zera do pełnej, takie jak pedał przyspieszenia samochodu lub poziom powiększenia w celowniku.
Direction2D2D ruch kierunkowy, taki jak obrót kamery lub standardowy ruch postaci w Robloxie.
Direction3D3D ruch kierunkowy, jak pojazd w powietrzu, który może unosić się w górę/dół, przyspieszać/hamować i dryfować w lewo/prawo.
ViewportPosition2D 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:

  1. Zalecane
    Wybierz obiekt Workspace na najwyższym poziomie w Eksploratorze, a następnie w oknie Właściwości ustaw właściwość PlayerScriptsUseInputActionSystem na Enabled.

  2. Utwórz nowy InputAction wewnątrz kontekstu PlayContext w ReplicatedStorage. Zmień jego nazwę na CharacterSprint, aby wskazać jego dedykowaną akcję.

    Nowa instancja InputAction wewnątrz InputContext, przemianowana na CharacterSprint
  3. 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).

    Właściwość Type instancji InputAction ustawiona na Bool

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.

AkcjaMysz/KlawiaturaGamepadDotyk
Otwórz menu RobloxEscStart przycisk (ButtonStart)N/D
Konsola deweloperaF9N/DN/D
Tryb pełnoekranowy (Windows)
Pokaż pulpit (Mac)
F11N/DN/D
Nagrywaj wideo (Windows)F12N/DN/D
Zrób zrzut ekranuPrintScreenN/DN/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:

  1. Wstaw nowy InputBinding do akcji CharacterSprint i zmień jego nazwę na KeyboardBinding. Następnie ustaw właściwość KeyCode powiązania na LeftShift.

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

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

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

  • Pressed — To zdarzenie wyzwala się tylko wtedy, gdy Type akcji wejściowej jest ustawione na Bool, i tylko wtedy, gdy stan przechodzi z false na true.
  • Released — To zdarzenie wyzwala się tylko wtedy, gdy Type akcji wejściowej jest ustawione na Bool, i tylko wtedy, gdy stan przechodzi z true na false.
  • 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 InputBindingsZwracane 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.
  • Zdarzenie Pressed:
    • true gdy naciśnięte
  • Zdarzenie Released:
    • true gdy zwolnione
  • Zdarzenie StateChanged:
    • true (naciśnięte) lub false (zwolnione)
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:

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

  2. Wklej poniższy kod do skryptu OnActivate. Zauważ połączenie zdarzenia Pressed w linijkach 1315, 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 1618, 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.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. 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.

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

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

  3. 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 bindable
    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("Kontekst wejściowy nie znaleziony!")
    end
    end)
  4. 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 Przycisku
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Wywołaj zdarzenie bindable z docelowym kontekstem wejściowym i stanem włączonym
    contextEvent: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:

  • Zalecane
    InputActionLabel — Obiekt GuiObject bez kodu, który automatycznie wyświetla poprawne wejście dla każdej platformy.
  • Średnie
    PreferredBinding — 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:

  1. Wewnątrz kontenera ScreenGui w StarterGui, wstaw InputActionLabel tak jak każdy inny GuiObject.

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

  3. Gdy etykieta rozwiązuje, co wyświetlić, sprawdza następujące w kolejności:

    1. Niestandardowe Obrazy — Jeśli dzieci InputBindings mają ustawioną właściwość DisplayImage, etykieta renderuje te obrazy bezpośrednio.

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

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

    4. Platformowe Napisy Klawiszy — Brakując wszystkiego powyżej, etykieta renderuje napisy dostarczone przez platformę przez UserInputService:GetStringForKeyCode().

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

Folder w ReplicatedStorage o nazwie Inputs

Aby skonfigurować ustawienie wejścia dla biegu postaci zgodnie z opisanymi powyżej sekcjami:

  1. Zalecane
    Wybierz obiekt Workspace na najwyższym poziomie w Eksploratorze, a następnie w oknie Właściwości ustaw właściwość PlayerScriptsUseInputActionSystem na Enabled.

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

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

    Nowa instancja InputContext w ReplicatedStorage o nazwie PlayContext
  4. 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.

    Nowa instancja InputAction w InputContext o nazwie CharacterSprint
  5. W nowym wierszu CharacterSprint przypisz powiązania dla każdego typu wejścia:

    1. Klawiatura i Mysz — Kliknij przycisk strzałki i wybierz LeftShift z menu wyboru.
    2. Dotyk — Kliknij komórkę, a następnie w hierarchii Eksploratora kliknij obiekt SprintButton, który wcześniej wstawiłeś do ScreenGui.
    3. Kontroler — Kliknij przycisk strzałki i wybierz ButtonY z menu wyboru.
  6. 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.

  7. Wklej poniższy kod do skryptu OnActivate. Zauważ połączenie zdarzenia Pressed w linijkach 1315, 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 1618, 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.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. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.