Samouczki dla średnio zaawansowanych

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 zapewnia użytkownikom znacznie lepszą i intuicyjniejszą kontrolę nad funkcjami w Twoim doświadczeniu. W tym poradniku przypiszesz akcję przeładowania do konkretnego klawisza.

Rozpocznij

Ten poradnik wykorzystuje narzędzie Blaster stworzone w Tworzenie narzędzi gracza. Możesz postępować według tych instrukcji, 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 między dowolnymi doświadczeniami. Aby dodać model do swojego doświadczenia:

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

Stwó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, gdzie wybierany jest skrypt ToolController wewnątrz narzędzia Blaster

  2. Utwórz zmienną, aby przechować nazwę 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. Stwó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. We wnętrzu funkcji sprawdź, czy podana actionName pasuje do nazwy akcji przeładowania i upewnij się, że inputState jest UserInputState.Begin (stan początkowy). To ważne, ponieważ funkcja uruchomi się za każdym razem, gdy zmieni się inputState, ale przeładowanie powinno zachodzić 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, gdy użytkownik wykonuje przeładowanie, zmień TextureId narzędzia na "rbxassetid://6593020923" na chwilę, a następnie zmień go z powrotem do jego pierwotnej wartości "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 konkretnym wejściem za pomocą 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, które reprezentują różne przyciski wejściowe, takie jak klawisze na klawiaturze czy 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 stworzenia 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. Przeprowadź testy przez wyposażenie narzędzia i naciśnięcie klawisza R na klawiaturze. Ikona plecaka powinna na chwilę zmienić się w symbol oczekiwania, aby sygnalizować, że broń jest przeładowywana:

Odłącz akcję

Gdy użytkownik zdejmie narzędzie, akcja musi zostać odłączona, aby nie mogli zostawić akcji przeładowania bez posiadania narzędzia.

  1. Stwó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. Podłącz funkcję toolUnequipped do zdarzenia Unequipped, aby funkcja uruchamiała się, gdy zdarzenie rozpocznie.


    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. Przeprowadź testy, 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 ukończona - dla dodatkowego wyzwania spróbuj zliczać 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.