System Akcji Wejścia

*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ś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.

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

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

    Nowa instancja InputContext wewnątrz ReplicatedStorage, przemianowana na PlayContext
  3. 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ściaPrzykładowe Zastosowanie
BoolAkcje wywoływane, takie jak skok, strzał, bieg itp. z obsługą progów naciśnięcia/zwolnienia na wejściach analogowych.
Direction1DZmienny zakres akcji od zera do pełnego, takich jak pedał przyspieszenia w samochodzie lub poziom powiększenia w celowniku.
Direction2DRuch kierunkowy 2D, taki jak obrót kamery lub standardowy ruch postaci w Robloxie.
Direction3DRuch kierunkowy 3D, taki jak powietrzny pojazd, który może unosić się w górę/dół, przyspieszać/hamować i dryfować w lewo/prawo.
ViewportPositionWspół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:

  1. Utwórz nowy InputAction wewnątrz kontekstu PlayContext w ReplicatedStorage. Zmień jego nazwę na CharacterSprint, aby wskazywała na dedykowaną akcję.

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

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

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:

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

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

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

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

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

  • Pressed — To zdarzenie wywołuje się tylko, gdy jego Type jest ustawione na Bool, i tylko wtedy, gdy stan zmienia się z false na true.
  • Released — To zdarzenie wywołuje się tylko, gdy jego Type jest ustawione na Bool, i tylko wtedy, gdy stan zmienia się z true na false.
  • 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 InputBindingsZwró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.
  • Zdarzenie Pressed:
    • true gdy naciśnięte
  • Zdarzenie Released:
    • true gdy zwolnione
  • Zdarzenie StateChanged:
    • true (naciśnięte) lub false (zwolnione)
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:

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

  2. Wklej następujący kod do skryptu OnActivate. Zauważ, że połączenie zdarzenia Pressed na liniach 1315 podwaja prędkość chodzenia postaci, gdy powiązanie wejścia biegu jest naciśnięte, a odpowiadające połączenie zdarzenia Released na liniach 1618 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.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 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.

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

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

  3. 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ązywalne
    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ścia nie znaleziony!")
    end
    end)
  4. 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 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 powiązywalne z celem kontekstu wejścia i stanem włączonym
    contextEvent: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.

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