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:
- W przeglądarce otwórz stronę model, kliknij przycisk Zdobądź. To dodaje model do twojego wyposażenie.
- W Studio, przejdź do zakładki Zobacz i kliknij na Skrzynię narzędzi.
- W oknie Skrzynki narzędzi, kliknij na przycisk Inventar. Następnie upewnij się, że menu rozwinięte jest na Mój model.
- 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.
Otwórz ToolController LocalScript w Blasterze.
Zrób zmienne, aby przechować imię akcji.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endWewną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 thenendendAby 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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
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 .
Zdobądź ContextActionService na górze skryptu.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endSprawdź 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.
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()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)Połącz funkcję toolUnequipped z wydarzeniem Unequipped, aby funkcja działała, gdy wydarzenie się uruchomi.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)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ę.