Durch die Verbindung von Benutzer-Eingaben mit Aktionen wird Benutzern eine viel bessere und intuitivere Kontrolle über die Funktionen deines Erlebnisses gewährt. In diesem Tutorial wirst du eine Neuladungsaktion mit einem bestimmten Schlüssel binden.
Erste Schritte
Dieses Tutorial verwendet das Blaster-Werkzeug, das in Creating Player Tools erstellt wurde. Sie können diesen Anweisungen folgen, um das Werkzeug zu erstellen, oder Sie können das Blaster-Modell herunterladen und es in 2> StarterPack2> einfügen.
Modelle können in deinem Inventar hinzugefügt werden, um sie zwischen jedem Erlebnis zu verwenden. Um ein Model zu deinem Erlebnis hinzuzufügen:
- In einem Browser, öffnen Sie die Modell-Seite, klicken Sie auf die Get-Schaltfläche. Dies fügt das Modell in Ihr Inventar.
- In Studio, gehen Sie auf die Ansicht-Registerkarte und klicken Sie auf die Toolbox.
- In dem Toolbox-Fenster, klicken Sie auf die Schaltfläche Inventar . Dann stellen Sie sicher, dass das Dropdown auf My Models ist.
- Wählen Sie das Blaster-Model , um es in das Erlebnis hinzuzufügen.
Erstellen eines Aktions-Handlers
Zuerst benötigen Sie eine Funktion, um zu behandeln, wenn der Benutzer-Eingang erkannt wird.
Öffne den ToolController LocalScript innerhalb des Blasters.
Erstellen Sie eine Variable, um einen Namen für die Actionzu speichern.
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)Erstellen Sie eine Funktion namens onAction , die drei Argumente erhält: actionName , inputState und inputObject . Dies wird die Funktion sein, die ausgeführt wird, wenn der Benutzer-Eingang erkannt wird.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endIn der Funktion überprüfen Sie, dass die angegebene actionName der Neulade-Aktion entspricht, und stellen Sie sicher, dass inputState``Enum.UserInputState|UserInputState.Begin (der Anfangszustand) ist. Dies ist wichtig, da die Funktion jedes Mal, wenn der 1> inputState1> sich ändert, ausgeführt wird, aber die Neulade
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendUm es offensichtlich zu machen, wenn der Benutzer neu lädt, ändern Sie die TextureId des Werkzeugs in "rbxassetid://6593020923" für einen Moment und ändern Sie sie dann wieder in ihren ursprünglichen Wert von "rbxassetid://92628145" zurück.
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
Aktion Binden
ContextActionService kann verwendet werden, um eine Funktion an einen bestimmten Eingang zu binden, indem die Funktion Class.ContextActionService:BindAction()|BindAction verwendet wird, die mehrere Argumente anerkennt:
- Der Name der Action
- Die Funktion, die die Aktion (einschließlich eines "Callbacks") verarbeitet
- Ob eine Touchscreen-Schaltfläche angezeigt wird oder nicht
- Jede Menge an Enum.KeyCodes , um die Actionzu erkennen und mit ihr zu verknüpfen.
KeyCodes sind Werte, die verschiedene Eingabe-Buttons darstellen, wie Tastenatur-Tasten oder Steuerkreuz-Tasten. Eine vollständige Liste der Codes ist verfügbar here .
Erhalte ContextActionService oben in dem Skript, das. PL: die Skripts.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"In der toolEquipped Funktion, rufen Sie BindAction auf und durchlaufen Sie die folgenden Argumente:
- Der Name der Aktion ( RELOAD_ACTION )
- Der Aktion-Generator ( onAction )
- Ein Wert, der einen Touch-Button erstellt ( true )
- Eine Tastenkombination zum Festellen ( 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()endTeste das Spielen, indem du das Werkzeug ausrüstest und die R-Taste auf deiner Tastatur drückst. Das Rucksack-Symbol sollte sich vorübergehend in ein Warte-Symbol verwandeln, um anzuzeigen, dass die Waffe nachgeladen wird:
Aktion freibinden
Wenn der Benutzer das Toolablegte, muss die Aktion gebunden werden , damit sie nicht neu starten können, ohne das Werkzeug ausgerüstet zu haben.
Erstellen Sie eine neue Funktion namens toolUnequipped und rufen Sie UnbindAction auf, indem Sie den Aktionsnamen durchlaufen.
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)Verbinden Sie die Funktion toolUnequipped mit dem Ereignis Unequipped, damit die Funktion ausgeführt wird, wenn das Ereignis feuert.
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)Teste das Spiel, um sicherzustellen, dass alles richtig funktioniert. Du solltest nachladen können, wenn das Werkzeug ausgerüstet ist, aber nicht, wenn es nicht ausgerüstet ist.
Ihre Neuladungsanimation ist jetzt abgeschlossen - für eine zusätzliche Herausforderung, versuchen Sie, jedes Mal, wenn der Blaster abgefeuert wird, einen Munitionszähler abzählen. Sie können dann die toolActivated -Funktion deaktivieren, wenn die Waffe keine Munition hat, und dann erneut aktivieren, wenn die Neuladungsanimation abgeschlossen ist.