Benutzeingabe erkennen

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

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:

  1. Öffne in einem Browser die Modell-Seite, klicke auf die Abrufen -Schaltfläche. Dadurch wird das Modell in dein Inventar aufgenommen.
  2. In Studio gehen Sie auf die Ansicht Registerkarte und klicken Sie auf die Toolbox .
  3. Klicken Sie im Toolbox-Fenster auf die Schaltfläche Inventar . Stellen Sie dann sicher, dass die Dropdown auf Meine Modelle ist.
  4. 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.

  1. Öffne den ToolController LocalScript

  2. Erstelle eine Variable, um einen Namen für die Actionzu 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. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Im 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 then
    end
    end
  5. Um 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

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 .

  1. Holen Sie sich ContextActionService oben auf dem Skript, das. PL: die Skripts.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 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. Teste 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.

  1. 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()
    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. 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.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. 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.