Die Verbindung von Benutzereingaben mit Aktionen gibt Benutzern eine viel bessere und intuitivere Kontrolle über die Funktionen deiner Erlebnis.In diesem Tutorial bindest du eine Nachladeaktion an einen bestimmten Schlüssel.
Loslegen
Dieses Tutorial verwendet das Blaster -Werkzeug, das in Spielerwerkzeuge erstellen erstellt wurde.Du kannst diesen Anweisungen folgen, um das Tool zu erstellen, oder du kannst das Blaster-Modell herunterladen und es in StarterPack einfügen.
Modelle können in deinem Inventar hinzugefügt werden, um zwischen jeder Erlebnisverwendet zu werden. Um ein Modell zu deiner Erlebnishinzuzufügen:
- Öffne in einem Browser die Modell-Seite, klicke auf die Abrufen -Schaltfläche. Dadurch wird das Modell in dein Inventar aufgenommen.
- In Studio gehen Sie auf die Ansicht Registerkarte und klicken Sie auf die Toolbox .
- Klicken Sie im Toolbox-Fenster auf die Schaltfläche Inventar . Stellen Sie dann sicher, dass die Dropdown auf Meine Modelle ist.
- Wähle das Blaster -Modell aus, um es zum Erlebnis hinzuzufügen.
Erstellen eines Aktionen-Handlers
Zuerst benötigen Sie eine Funktion, um zu handeln, wenn Benutzeingabe erkannt wird.
Öffne den ToolController LocalScript
Erstelle 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)Erstelle eine Funktion namens onAction, die drei Argumente erhält: actionName , inputState und inputObject.Dies wird die Funktion sein, die ausgeführt wird, wenn Benutzeingabe erkannt wird.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endIm Inneren der Funktion überprüfen Sie, dass die angegebene actionName dem Namen der Neuladungsaktion entspricht, und stellen Sie sicher, dass inputState (der Anfangszustand) ist UserInputState.Begin (der Anfangszustand).Dies ist wichtig, weil die Funktion jedes Mal ausgeführt wird, wenn sich die inputState Änderungen vornehmen, aber die Neuladung nur einmal erfolgen muss.
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, ändere das TextureId des Werkzeugs für einen Moment in "rbxassetid://6593020923" und ändere es dann wieder in seinen ursprünglichen Wert von "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
Binden Sie die Action
ContextActionService kann verwendet werden, um eine funktion an einen bestimmten eingang zu binden, indem die funktion BindAction verwendet wird, die mehrere argumente akzeptiert:
- Der Name der Action
- Die Funktion, die die Aktion verarbeitet (auch "Callback" genannt)
- Ob ein Touchscreen-Button angezeigt werden soll oder nicht
- Jede Menge von Enum.KeyCodes zum Erkennen und Verknüpfen mit der Action.
Tastatencode sind Werte, die verschiedene Eingabe-Buttons repräsentieren, wie Tastaturtasten oder Controller-Tasten.Eine vollständige Liste von Codes ist verfügbar here .
Holen Sie sich ContextActionService oben auf dem Skript, das. PL: die Skripts.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Innerhalb der toolEquipped Funktion rufen Sie BindAction auf und durchlaufen die folgenden Argumente:
- Der Name der Aktion ( RELOAD_ACTION )
- Der Aktionshändler ( onAction )
- Ein Wert, um einen Touch-Button zu erstellen ( true )
- Ein Tastendruck zum Erkennen ( 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 dein Tool aus, indem du es ausrüstest und die R-Taste auf deiner Tastatur drückst.Das Rucksack-Symbol sollte sich kurzzeitig in ein Wartessymbol verwandeln, um zu signalisieren, dass die Waffe nachlädt:
Entferne die Action
Wenn der Benutzer das Tool abnimmt, muss die Aktion ungebunden sein, damit sie nicht ohne das Tool neu laden können.
Erstelle eine neue Funktion mit dem Namen toolUnequipped und rufe UnbindAction auf, indem du den Aktionsnamen durchläufst.
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)Verbinde die toolUnequipped-Funktion mit dem Unequipped-Ereignis, damit die Funktion ausgeführt wird, wenn das Ereignis ausgelöst wird.
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 deinen Spielablauf, um zu bestätigen, dass alles richtig funktioniert. Du solltest in der Lage sein, neu zu laden, wenn das Werkzeug ausgerüstet ist, aber nicht, wenn es nicht ausgerüstet ist.
Deine Nachladungsanimation ist jetzt abgeschlossen - für eine zusätzliche Herausforderung versuche, jedes Mal, wenn der Blaster abgefeuert wird, einen Munitionszähler herunterzuzählen.Du kannst dann die toolActivated-Funktion deaktivieren, wenn die Waffe keine Munition hat, und sie dann erneut aktivieren, sobald die Nachladearbeit abgeschlossen ist.