Die Verbindung von Benutzereingaben zu Aktionen gibt den Nutzern viel bessere und intuitivere Kontrolle über die Funktionen deiner Erfahrung. In diesem Tutorial wirst du eine Neuladungsaktion an eine spezifische Taste binden.
Erste Schritte
Dieses Tutorial verwendet das Blaster-Werkzeug, das in Spielerwerkzeuge erstellen erstellt wurde. Du kannst diese Anweisungen folgen, um das Werkzeug zu erstellen, oder du kannst das Blaster Modell herunterladen und in StarterPack einfügen.
Modelle können in dein Inventar hinzugefügt werden, um sie in jeder Erfahrung zu verwenden. Um ein Modell in deine Erfahrung hinzuzufügen:
- Öffne in einem Browser die Modell-Seite und klicke auf die Holenn Schaltfläche. Dadurch wird das Modell in dein Inventar hinzugefügt.
- Öffne im Studio über das Fenster-Menü oder die Startseite-Reiterleiste die Toolbox und wähle den Inventar-Tab aus.
- Stelle sicher, dass das Dropdown auf Meine Modelle eingestellt ist.
- Wähle das Blaster-Modell aus, um es in die Erfahrung hinzuzufügen.
Erstelle einen Aktionshandler
Zuerst benötigst du eine Funktion, die handelt, wenn eine Benutzereingabe erkannt wird.
Öffne das ToolController LocalScript im Blaster.

Mache 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)Erstelle eine Funktion namens onAction, die drei Argumente erhält: actionName, inputState und inputObject. Dies wird die Funktion sein, die ausgeführt wird, wenn eine Benutzereingabe erkannt wird.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endÜberprüfe innerhalb der Funktion, ob der gegebene actionName mit dem Neuladungsaktionsnamen übereinstimmt und stelle 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 Neuladen nur einmal erforderlich ist.
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, ändere die TextureId des Werkzeugs für einen Moment auf "rbxassetid://6593020923" und ändere es dann zurück auf den 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
Binde die Aktion
ContextActionService kann verwendet werden, um eine Funktion an eine bestimmte Eingabe zu binden, indem die BindAction-Funktion verwendet wird, die mehrere Argumente akzeptiert:
- Der Name der Aktion.
- Die Funktion, die die Aktion verarbeitet (auch als "Callback" bezeichnet).
- Ob ein Touchscreen-Button angezeigt werden soll oder nicht.
- Eine beliebige Anzahl von Enum.KeyCodes, um sie zu erkennen und mit der Aktion zu verknüpfen.
KeyCodes sind Werte, die verschiedene Eingabetasten repräsentieren, wie z. B. Tastaturtasten oder Controller-Tasten. Eine vollständige Liste der Codes ist verfügbar hier.
Hole dir ContextActionService am Anfang des Skripts.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Rufe innerhalb der toolEquipped-Funktion BindAction auf und übergebe die folgenden Argumente:
- Den Namen der Aktion (RELOAD_ACTION)
- Den Aktionshandler (onAction)
- Ein Wert, um einen Touch-Button zu erstellen (true)
- Ein Tastendruck zur Erkennung (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 Spiel, indem du das Werkzeug ausrüstest und die R-Taste auf deiner Tastatur drückst. Das Rucksacksymbol sollte sich kurzzeitig in ein Wartezeichen ändern, um anzuzeigen, dass die Waffe nachlädt:
Hebe die Aktion auf
Wenn der Benutzer das Werkzeug ablegt, muss die Aktion aufgehoben werden, damit sie nicht ohne das ausgerüstete Werkzeug nachladen kann.
Erstelle eine neue Funktion namens toolUnequipped und rufe UnbindAction auf, indem du den Aktionsnamen übergibst.
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 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)Teste das Spiel, um sicherzustellen, dass alles korrekt funktioniert. Du solltest in der Lage sein, nachzuladen, wenn das Werkzeug ausgerüstet ist, aber nicht, wenn es nicht ausgerüstet ist.
Deine Nachladeanimation ist jetzt abgeschlossen - als zusätzliche Herausforderung versuche, einen Munitionszähler herunterzuzählen, jedes Mal, wenn der Blaster abgefeuert wird. Du kannst dann die toolActivated-Funktion deaktivieren, wenn die Waffe keine Munition mehr hat, und sie wieder aktivieren, sobald die Nachladeanimation abgeschlossen ist.