Die Verbindung von Benutzerinput zu Aktionen gibt den Benutzern eine viel bessere und intuitivere Kontrolle über die Funktionen Ihres Spiels. In diesem Tutorial werden Sie eine Nachladeaktion an eine bestimmte Taste binden.
Erste Schritte
Dieses Tutorial verwendet das Blaster-Werkzeug, das in Spielerwerkzeuge erstellen erstellt wurde. Sie können diese Anweisungen befolgen, um das Werkzeug zu erstellen, oder Sie können das Blaster-Modell herunterladen und in StarterPack einfügen.
Modelle können in Ihr Inventar hinzugefügt werden, um zwischen verschiedenen Spielen verwendet zu werden. Um ein Modell in Ihr Spiel hinzuzufügen:
- Öffnen Sie in einem Browser die Modell-Seite und klicken Sie auf die Schaltfläche Holen. Dadurch wird das Modell in Ihr Inventar hinzugefügt.
- Öffnen Sie im Studio-Menü Fenster oder in der Symbolleiste der Registerkarte Start die Toolbox und wählen Sie die Registerkarte Inventar.
- Stellen Sie sicher, dass das Dropdown-Menü auf Meine Modelle eingestellt ist.
- Wählen Sie das Blaster-Modell aus, um es in das Spiel hinzuzufügen.
Erstellen eines Aktionshandlers
Zuerst benötigen Sie eine Funktion, die ausgeführt wird, wenn Benutzerinput erkannt wird.
Öffnen Sie das ToolController LocalScript innerhalb des Blasters.

Erstellen Sie eine Variable, um einen Namen für die Aktion zu 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 Benutzerinput erkannt wird.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endÜberprüfen Sie innerhalb der Funktion, ob der gegebene actionName mit dem Namen der Nachladeaktion übereinstimmt, und stellen Sie sicher, dass inputState UserInputState.Begin (der Anfangszustand) ist. Dies ist wichtig, da die Funktion jedes Mal ausgeführt wird, wenn sich der inputState ändert, aber das Nachladen 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 nachlädt, ändern Sie die TextureId des Werkzeugs für einen Moment in "rbxassetid://6593020923" und ändern Sie es dann zurück 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 der Aktion
ContextActionService kann verwendet werden, um eine Funktion an einen bestimmten Input zu binden, indem die Funktion BindAction verwendet wird, die mehrere Argumente akzeptiert:
- Den Namen der Aktion.
- Die Funktion, die die Aktion behandelt (auch als "Callback" bezeichnet).
- Ob eine Touchscreen-Schaltfläche angezeigt werden soll oder nicht.
- Eine beliebige Anzahl von Enum.KeyCodes, um zu erkennen und mit der Aktion zu verknüpfen.
KeyCodes sind Werte, die verschiedene Eingabetasten darstellen, wie z. B. Tastaturtasten oder Controller-Tasten. Eine vollständige Liste der Codes ist hier verfügbar.
Holen Sie sich ContextActionService am Anfang des Skripts.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Rufen Sie innerhalb der Funktion toolEquipped BindAction auf und übergeben Sie die folgenden Argumente:
- Den Namen der Aktion (RELOAD_ACTION)
- Den Aktionshandler (onAction)
- Einen Wert, um eine Touch-Schaltfläche zu erstellen (true)
- Einen Tastendruck, um zu 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()endTesten Sie das Spiel, indem Sie das Werkzeug ausrüsten und die R-Taste auf Ihrer Tastatur drücken. Das Rucksacksymbol sollte sich kurzzeitig in ein Wartesymbol ändern, um anzuzeigen, dass die Waffe nachlädt:
Aktion lösen
Wenn der Benutzer das Werkzeug ablegt, muss die Aktion gelöst werden, damit er nicht nachladen kann, ohne dass das Werkzeug ausgerüstet ist.
Erstellen Sie eine neue Funktion namens toolUnequipped und rufen Sie UnbindAction auf, wobei Sie den Aktionsnamen übergeben.
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 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)Testen Sie das Spiel, um zu bestätigen, dass alles korrekt funktioniert. Sie sollten in der Lage sein, nachzuladen, wenn das Werkzeug ausgerüstet ist, aber nicht, wenn es nicht ausgerüstet ist.
Ihre Nachladeanimation ist jetzt abgeschlossen - als zusätzliche Herausforderung versuchen Sie, einen Munitionszähler herunterzuzählen, jedes Mal, wenn der Blaster abgefeuert wird. Sie können dann die Funktion toolActivated deaktivieren, wenn die Waffe keine Munition mehr hat, und sie wieder aktivieren, sobald die Nachladeanimation abgeschlossen ist.