Wykrywanie wejścia użytkownika

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

Połączenie wejścia użytkownika z akcjami daje użytkownikom znacznie lepszą i bardziej intuicyjną kontrolę nad funkcjami twojej gry. W tym samouczku powiążesz akcję przeładowania z określonym klawiszem.

Rozpocznij

Ten samouczek wykorzystuje narzędzie Blaster stworzone w Tworzenie narzędzi gracza. Możesz postępować zgodnie z tymi instrukcjami, aby stworzyć narzędzie lub możesz pobrać model Blaster i wstawić go do StarterPack.

Modele można dodać do swojego Inwentarza, aby używać ich w różnych grach. Aby dodać model do swojej gry:

  1. W przeglądarce otwórz stronę modelu, kliknij przycisk Pobierz. To dodaje model do twojego inwentarza.
  2. Z menu Okno w Studio lub paska narzędzi na karcie Strona główna, otwórz Toolbox i wybierz kartę Inwentarz.
  3. Upewnij się, że rozwijane menu jest ustawione na Moje modele.
  4. Wybierz model Blaster, aby dodać go do gry.

Utwórz obsługę akcji

Najpierw potrzebujesz funkcji, która obsłuży wykrycie wejścia użytkownika.

  1. Otwórz LocalScript ToolController wewnątrz Blastera.

    Widok Eksploratora, w którym wybrano skrypt ToolController wewnątrz narzędzia Blaster

  2. Utwórz zmienną do przechowywania nazwy akcji.

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. Utwórz funkcję o nazwie onAction, która przyjmuje trzy argumenty: actionName, inputState i inputObject. To będzie funkcja, która uruchomi się, gdy wykryte zostanie wejście użytkownika.

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Wewnątrz funkcji sprawdź, czy podana actionName odpowiada nazwie akcji przeładowania i upewnij się, że inputState to UserInputState.Begin (stan początkowy). To jest ważne, ponieważ funkcja uruchomi się za każdym razem, gdy zmieni się inputState, ale przeładowanie musi się zdarzyć tylko raz.

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Aby było oczywiste, kiedy użytkownik przeładowuje, zmień TextureId narzędzia na "rbxassetid://6593020923" na chwilę, a następnie zmień go z powrotem na jego oryginalną wartość "rbxassetid://92628145".

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

Powiąż akcję

ContextActionService może być użyty do powiązania funkcji z określonym wejściem, używając funkcji BindAction, która przyjmuje kilka argumentów:

  • Nazwa akcji.
  • Funkcja obsługująca akcję (nazywana również "callback").
  • Czy przycisk dotykowy powinien być wyświetlany.
  • Dowolna liczba Enum.KeyCodes, które mają być wykrywane i powiązane z akcją.

KeyCodes to wartości reprezentujące różne przyciski wejściowe, takie jak klawisze na klawiaturze lub przyciski kontrolera. Pełna lista kodów jest dostępna tutaj.

  1. Uzyskaj ContextActionService na początku skryptu.

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. Wewnątrz funkcji toolEquipped wywołaj BindAction i przekaż następujące argumenty:

    • Nazwa akcji (RELOAD_ACTION)
    • Obsługa akcji (onAction)
    • Wartość do utworzenia przycisku dotykowego (true)
    • Naciśnięcie klawisza do wykrycia (Enum.KeyCode.R)
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Przetestuj grę, wyposażając narzędzie i naciskając klawisz R na klawiaturze. Ikona plecaka powinna na chwilę zmienić się na symbol oczekiwania, aby sygnalizować, że broń jest przeładowywana:

Odłącz akcję

Gdy użytkownik zdejmie narzędzie, akcja musi być odłączona, aby nie mógł przeładować bez wyposażonego narzędzia.

  1. Utwórz nową funkcję o nazwie toolUnequipped i wywołaj UnbindAction, przekazując nazwę akcji.

    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. Połącz funkcję toolUnequipped z wydarzeniem Unequipped, aby funkcja uruchomiła się, gdy zdarzenie zostanie wywołane.

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. Przetestuj grę, aby potwierdzić, że wszystko działa poprawnie. Powinieneś być w stanie przeładować, gdy narzędzie jest wyposażone, ale nie, gdy jest zdjęte.

Twoja animacja przeładowania jest teraz gotowa - dla dodatkowego wyzwania spróbuj odliczać licznik amunicji za każdym razem, gdy blaster jest strzelany. Możesz następnie dezaktywować funkcję toolActivated, gdy pistolet nie ma amunicji, a następnie ponownie ją aktywować, gdy animacja przeładowania się zakończy.

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