Wykrywanie wejść 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 samouczniku wiążysz działanie ponownego ładowania z określonym kluczem.

Pierwsze kroki

Ten samouczek używa narzędzia Blaster, które zostało stworzone w Creating Player Tools. Możesz podążać za tymi instrukcjami, aby utworzyć narzędzie lub możesz załadować model Blastera i wstawić go do 2> StarterPack2>.

Modele można dodawać do swojego ekwipunku, aby używać ich między dowolnym doświadczeniem. Aby dodać model do swojego ekwipunku:

  1. W przeglądarce otwórz stronę model, kliknij przycisk Zdobądź. To dodaje model do twojego wyposażenie.
  2. W Studio, przejdź do zakładki Zobacz i kliknij na Skrzynię narzędzi.
  3. W oknie Skrzynki narzędzi, kliknij na przycisk Inventar. Następnie upewnij się, że menu rozwinięte jest na Mój model.
  4. Wybierz model Blaster , aby dodać go do doświadczenia.

Tworzenie akcji

Najpierw będziesz potrzebować funkcji do zarządzania, gdy wykryto wejście użytkownika.

  1. Otwórz ToolController LocalScript w Blasterze.

  2. Zrób zmienne, aby przechować imię 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ę nazyającą się naAction, która otrzymuje trzy argumenty: actionName, inputState i inputObject. Ta będzie funkcja, która będzie działać, gdy użytkownik wpisze.


    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ź, że dany actionName pasuje do nazwy ponownego ładowania i upewnij się, że inputState jest UserInputState.Begin ( stan bierny). To jest ważne, ponieważ funkcja będzie się wykonuje za każdym razem, gdy 2>inputState2> się zmieni, ale ponowne ładowanie tylko będzie się


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Aby uczynić to oczywistym, gdy użytkownik ponownie załadowuje, zmień TextureId narzędzia na "rbxassetid://6593020923" na chwilę i następnie zmień go ponownie 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

Związanie działania

ContextActionService może być używany do łączenia funkcji do określonego wejścia poprzez użycie funkcji Class.ContextActionService:BindAction()|BindAction , która akceptuje kilka argumentów:

  • Nazwa akcji
  • Funkcja do obsługi akcji (również zwana " callbackiem")
  • Czy należy wyświetlać przyciski na ekranie dotykowym
  • Dowolna liczba Enum.KeyCodes aby wykryć i powiązać z akcji.

Kody kluczowe są wartościami, które reprezentują różne przyciski wejścia, takie jak 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ż poprzez następujące argumenty:

    • Nazwa akcji ( RELOAD_ACTION )
    • Akcja Handler ( onAction )
    • Wartość do stworzenia przycisku dotykowego ( true )
    • Przycisk klawiatury do wykrywania ( 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. Sprawdź swoją broń, używając narzędzia i naciskając R na klawiaturze. Ikona plecaka powinna momentalnie zmienić się na znak czeku, aby zasygnalizować, że broń jest ładowana ponownie:

Odznaczanie akcji

Gdy użytkownik zdjął narzędzie, akcja musi być niezwiązana , aby nie mogli ponownie załadować go, gdy narzędzie nie jest założone.

  1. Utwórz nową funkcję nazwę toolUnequipped i wezwij UnbindAction, przesyłając imię 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 działała, gdy wydarzenie się uruchomi.


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

Twoja animacja reload jest teraz ukończona - dla dodatkowego wyzwania, spróbuj obliczać licznik amunicji za każdym razem, gdy blaster jest wystrzelony. Następnie możesz wyłączyć funkcję toolActivated, gdy pistolet nie ma amunicji, a następnie ponownie ją aktywować, gdy animacja reload zakończy się.