Wykryj wpisanie 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 działaniami daje użytkownikom znacznie lepszą i bardziej intuicyjną kontrolę nad funkcjami twojego doświadczenia.W tym samouczku połączysz akcję ponownego ładowania z określonym kluczem.

Rozpocznij

Ten samouczek używa narzędzia Blaster stworzonego w Twórz narzędzia gracza.Możesz postąpić zgodnie z tymi instrukcjami, aby utworzyć narzędzie lub możesz pobrać model Blaster i wstawić go do StarterPack .

Modele mogą być dodane do twojego ekwipunku, aby były używane między każdym doświadczeniem. Aby dodać model do swojego doświadczenia:

  1. W przeglądarce otwórz stronę modelu model, kliknij przycisk Zdobądź . To dodaje model do twojego wyposażenie.
  2. W Studio przejdź do zakładki Widok i kliknij na Pudełko narzędzi .
  3. W oknie Toolbox kliknij przycisk Ekwipunek . Następnie upewnij się, że rozwijana lista jest na Moje modele .
  4. Wybierz model Blastera , aby dodać go do doświadczenia.

Stwórz menadżera akcji

Najpierw będziesz potrzebował funkcji do obsługi, gdy wykryto wejście użytkownika.

  1. Otwórz sterownik narzędia w środku Blastera.

  2. Stwórz zmienną, aby przechować nazwę dla 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 otrzymuje trzy argumenty: actionName, inputState i inputObject.Będzie to funkcja, która uruchomi się, gdy wykryto 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. W obrębie funkcji sprawdź, czy podany actionName pasuje do nazwy akcji ponownego ładowania i upewnij się, że inputState jest UserInputState.Begin (pierwszy stan).Jest to ważne, ponieważ funkcja będzie uruchamiana za każdym razem, gdy nastąpią zmiany inputState, ale ponowne ładowanie powinno się zdarzyć tylko raz.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Aby ułatwić użytkownikowi ponowne ładowanie, zmień TextureId narzędzia na "rbxassetid://6593020923" na chwilę, a następnie zmień go z powrotem do jego oryginalnej 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

Zwiąż akcji

ContextActionService można użyć do wiązania funkcji do określonego wejścia za pomocą funkcji BindAction, która akceptuje kilka argumentów:

  • Nazwa akcji
  • Funkcja do obsługi akcji (również nazywana "Callback")
  • Czy przycisk dotykowy powinien być wyświetlany, czy nie
  • Dowolna ilość Enum.KeyCodes do wykrycia i powiązania z akcji.

Kody klawisz są wartościami, które reprezentują różne przyciski wejściowe, takie jak klawisze klawiatury lub przyciski kontrolera.Pełna lista kodów jest dostępna here .

  1. Zdobądź ContextActionService na górze skryptu.


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

    • Nazwa akcji ( RELOAD_ACTION )
    • Menadżer 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. Testuj narzędzie, wyposażając je i naciskając klawisz R na klawiaturze.Ikona plecaka powinna zmienić się na chwilę na symbol oczekiwania, aby sygnalizować, że broń się przeładowuje:

Rozwiąż akcji

Kiedy użytkownik odinstaluje narzędzie, akcja musi być odłączona , aby nie mogli ponownie załadować bez wyposażenia narzędzia.

  1. Stwórz nową funkcję o nazwie toolUnequipped i wezwij 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 wydarzenie się wystrzeli.


    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, aby potwierdzić, że wszystko działa poprawnie. Powinieneś być w stanie ponownie załadować, gdy narzędzie jest wyposażone, ale nie gdy jest nieuzbrojone.

Twoja animacja przeładowania jest teraz kompletna - dla dodatkowego wyzwania spróbuj odliczać licznik amunicji za każdym razem, gdy wysłany zostanie blaster.Następnie możesz wyłączyć funkcję toolActivated gdy broń nie ma amunicji, a następnie ponownie ją aktywować po zakończeniu animacji przeładowania.