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:
- W przeglądarce otwórz stronę modelu model, kliknij przycisk Zdobądź . To dodaje model do twojego wyposażenie.
- W Studio przejdź do zakładki Widok i kliknij na Pudełko narzędzi .
- W oknie Toolbox kliknij przycisk Ekwipunek . Następnie upewnij się, że rozwijana lista jest na Moje modele .
- 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.
Otwórz sterownik narzędia w środku Blastera.
Stwórz zmienną, aby przechować nazwę dla 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)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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endW 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 thenendendAby 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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
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 .
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ż 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 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()endTestuj 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.
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()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 uruchomiła się, gdy wydarzenie się wystrzeli.
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)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.