Relier l'entrée utilisateur aux actions donne aux utilisateurs un meilleur et plus intuitif contrôle des fonctionnalités de votre expérience.Dans ce tutoriel, vous allez lier une action de rechargement à une clé spécifique.
Commencer
Ce tutoriel utilise l'outil Blaster créé dans Créer les outils du joueur.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 StarterPack .
Les modèles peuvent être ajoutés à votre inventaire pour être utilisés entre toute expérience. Pour ajouter un modèle à votre expérience :
- Dans un navigateur, ouvrez la page du modèle model, cliquez sur le bouton Obtenir . Cela ajoute le modèle à votre inventaire.
- Dans Studio, allez à l'onglet Affichage et cliquez sur la boîte à outils .
- Dans la fenêtre de la boîte à outils, cliquez sur le bouton Inventaire . Assurez-vous ensuite que le menu déroulant est sur mes modèles .
- Sélectionnez le modèle Blaster pour l'ajouter à l'expérience.
Créer un gestionnaire d'action
Tout d'abord, vous aurez besoin d'une fonction pour gérer lorsque l'entrée utilisateur est détectée.
Ouvrez le Contrôleur d'outils LocalScript.
Créez une variable pour stocker un nom pour l'action.
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)Créez une fonction nommée onAction 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.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endÀ l'intérieur de 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 initial).C'est important car la fonction s'exécutera à chaque fois que les modifications de inputState changeront, mais le rechargement n'a besoin de se produire qu'une seule fois.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendPour rendre évident lorsque l'utilisateur recharge, modifiez le TextureId du outil en "rbxassetid://6593020923" pour un moment, puis changez-le de nouveau en sa valeur originale de "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
Lier l'action
ContextActionService peut être utilisé pour lier une fonction à une 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 »)
- Si oui ou non un bouton de touchscreen doit être affiché
- N'importe quel montant de Enum.KeyCodes pour détecter et associer à l'action.
Les codes clés 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 des codes est disponible here .
Obtenez ContextActionService au sommet du script.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"À l'intérieur de la fonction toolEquipped, appelez BindAction et passez à travers les arguments suivants :
- Le nom de l'action ( RELOAD_ACTION )
- Le gestionnaire d'action ( onAction )
- Une valeur pour créer un bouton tactile ( true )
- Une pression de 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 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()endTestez le jeu en équipant l'outil et en appuyant sur la touche R sur votre clavier.L'icône de sac à dos devrait changer momentanément en symbole d'attente pour signaler que l'arme est en train de recharger :
Débloquer l'action
Lorsque l'utilisateur déséquipe l'outil, l'action doit être désolidarisée afin qu'il ne puisse pas se recharger sans que l'outil soit équipé.
Créez une nouvelle fonction appelé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()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)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.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)Testez 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 désormais terminée - pour un défi supplémentaire, essayez de compter à rebours un compteur de munitions à chaque fois que le blaster est tiré.Vous pouvez ensuite désactiver la fonction toolActivated lorsque le pistolet n'a pas de munitions, puis la réactiver une fois l'animation de rechargement terminée.