Détection de l'entrée de l'utilisateur

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Connecter l'entrée de l'utilisateur aux actions donne aux utilisateurs un meilleur contrôle et une meilleure expérience sur les fonctionnalités de votre expérience. Dans ce tutoriel, vous lierez une action de rechargement à une clé spécifique.

Démarrer

Ce tutoriel utilise l'outil Blaster créé dans Créer des outils pour les joueurs. Vous pouvez suivre ces instructions pour créer l'outil ou vous pouvez télécharger le modèle Blaster et l'insérer dans 2> StarterPack2>.

Les modèles peuvent être ajoutés à votre inventaire pour être utilisés entre n'importe quelle expérience. Pour ajouter un modèle à votre expérience :

  1. Dans un navigateur, ouvrez la page modèle, cliquez sur le bouton obtenir . Cela ajoute le modèle à votre inventaire.
  2. Dans Studio, allez dans l'Affichage onglet et cliquez sur la Boîte à outils.
  3. Dans la fenêtre de la boîte à outils, cliquez sur le bouton Inventaire. Ensuite, assurez-vous que le menu déroulant est sur Mes modèles.
  4. Sélectionnez le modèle Blaster pour l'ajouter dans l'expérience.

Créer un Action Handler

Tout d'abord, vous aurez besoin d'une fonction pour gérer quand l'entrée de l'utilisateur est détectée.

  1. Ouvrez le ToolController LocalScript à l'intérieur du Blaster.

  2. Faites une variable pour stocker un nom pour l'action.


    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. Créez une fonction nommée surAction qui reçoit trois arguments : actionName , inputState et inputObject . Ce sera la fonction qui s'exécute lorsque l'entrée de l'utilisateur est détectée.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Dans la fonction, vérifiez que le actionName donné correspond au nom de l'action de rechargement et assurez-vous que inputState est UserInputState.Begin (l'état de départ). Ceci est important car la fonction s'exécute chaque fois que le 2> inputState2> change, mais le rechargement ne nécessite qu'à se produire une fois.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Pour le rendre évident lorsque l'utilisateur recharge, changez le TextureId de l'outil en "rbxassetid://6593020923" pour un moment, puis changez-le de nouveau à sa valeur d'origine "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

Lier l'action

ContextActionService peut être utilisé pour lier une fonction à un entrée spécifique en utilisant la fonction BindAction, qui accepte plusieurs arguments :

  • Le nom de l'action
  • La fonction pour gérer l'action (appelée également « rappel»)
  • Que ce soit ou non un bouton d'écran tactile doit être affiché
  • N'importe quelle quantité de Enum.KeyCodes pour détecter et associer avec l'action.

Les codes clé sont des valeurs qui représentent différents boutons d'entrée, tels que les touches de clavier ou les boutons de contrôleur. Une liste complète de codes est disponible here .

  1. Obtenez ContextActionService au sommet du script.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. À l'intérieur de la fonction toolEquipped, appelez BindAction et passez par les arguments suivants :

    • Le nom de l'action ( RELOAD_ACTION )
    • Le gestionnaire d'action ( onAction )
    • Une valeur pour créer un bouton de touche ( true )
    • Une pression clé pour détecter ( 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. Testez le jeu en équipant l'outil et en appuyant sur la touche R sur votre clavier. L'icône de l'inventaire devrait changer temporairement en un symbole d'attente pour signaler que l'arme se recharge :

Déвязion de l'action

Lorsque l'utilisateur déséquipe l'outil, l'action doit être désolidariser pour qu'ils ne puissent pas recharger sans que l'outil soit équipé.

  1. Créez une nouvelle fonction nommée toolUnequipped et appelez UnbindAction , en passant par le nom de l'action.


    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. Connectez la fonction toolUnequipped à l'événement Unequipped afin que la fonction s'exécute lorsque l'événement se déclenche.


    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. Testez le jeu pour confirmer que tout fonctionne correctement. Vous devriez être en mesure de recharger lorsque l'outil est équipé, mais pas lorsqu'il n'est pas équipé.

Votre animation de rechargement est maintenant terminée - pour un défi supplémentaire, essayez de compter un compte à rebours des conteneurs de munitions chaque fois que le blaster est tiré. Vous pouvez ensuite désactiver la fonction toolActivated lorsque le blaster n'a pas de munitions, puis le réactiver une fois que l'animation de rechargement est terminée.