Benutzerinput erkennen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

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:

  1. Ö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.
  2. Öffnen Sie im Studio-Menü Fenster oder in der Symbolleiste der Registerkarte Start die Toolbox und wählen Sie die Registerkarte Inventar.
  3. Stellen Sie sicher, dass das Dropdown-Menü auf Meine Modelle eingestellt ist.
  4. 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.

  1. Öffnen Sie das ToolController LocalScript innerhalb des Blasters.

    Ansicht des Explorers, in dem das ToolController-Skript innerhalb des Blaster-Werkzeugs ausgewählt ist

  2. Erstellen Sie eine Variable, um einen Namen für die Aktion zu speichern.

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Ü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 then
    end
    end
  5. Um 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

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.

  1. Holen Sie sich ContextActionService am Anfang des Skripts.

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Testen 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.

  1. 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()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. 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.

©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.