Le système d'action d'entrée multiplateforme Input Action System vous permet de connecter des actions et d'organiser des liaisons à travers divers appareils matériels au moment de l'édition. Combiné avec contexts, vous pouvez facilement configurer et éditer un système d'entrée modulaire qui fonctionne sur n'importe quel appareil à n'importe quelle phase de jeu. Les cas d'utilisation incluent :
- Un système de tir à la première personne où des actions changent dynamiquement selon que le joueur est en mode combat ou en mode spectateur.
- Un système de conduite complet équipé d'accélération/décélération, de boosts de voiture et de stations de ravitaillement.
- Des touches de raccourci pour un système d'aptitudes dans un jeu de combat pour changer des mouvements sans que les joueurs ratent un coup.
Contextes d'entrée
Un InputContext est une collection d'actions qui contient des actions d'entrée connexes, par exemple PlayContext pour les contrôles de personnage en jeu et NavContext pour les contrôles de navigation dans les menus de l'interface utilisateur. Vous pouvez activer/désactiver des contextes (et leurs actions correspondantes) via leur propriété Enabled, par exemple pour activer le NavContext lorsque le menu d'inventaire est ouvert, puis passer au PlayContext lorsque le joueur ferme le menu et revient au jeu principal.
Même si un jeu peut ne pas utiliser plusieurs contextes d'entrée initialement, il est recommandé de créer un contexte principal au niveau supérieur de tout système d'entrée, par exemple l'instance de PlayContext pour les entrées qui se produisent pendant le gameplay.
- RECOMMANDÉCréez un Folder nommé Inputs à l'intérieur de ReplicatedStorage pour contenir divers contextes d'entrée.

Insérez un nouveau InputContext dans le dossier et renommez-le en PlayContext.

Dans la fenêtre Propriétés, définissez Priority sur 2000 et activez Sink. Un contexte avec Sink activé consomme les événements d'entrée pour ses KeyCodes liés à son niveau de priorité, bloquant ces entrées afin qu'elles n'atteignent pas les contextes de priorité inférieure. Cela est pratique pour des cas d'utilisation comme un écran d'inventaire qui doit supprimer des entrées de gameplay spécifiques pendant son ouverture. Dans cet exemple, le PlayContext se voit attribuer un Priority suffisamment élevé pour bloquer ses entrées liées avant que les contextes par défaut de PlayerScripts ne les traitent.
Actions d'entrée
Un InputAction définit une mécanique d'action de jeu telle que "Sauter", "Sprint" ou "Tirer". Ces actions sont alors mappées sur des entrées matérielles à l'aide de liaisons d'entrée.
Un InputAction peut être de plusieurs variations selon sa propriété Type (Enum.InputActionType). La valeur par défaut est Bool, conçue pour recevoir des valeurs true/false provenant de l'appui/déclenchement d'entrées telles que ButtonA, E, ou MouseLeftButton.
| Type d'Action d'Entrée | Exemple d'Utilisation |
|---|---|
| Bool | Actions déclenchées telles que sauter, tirer, sprinter, etc. avec prise en charge des seuils appuyé/déclenché sur les entrées analogiques. |
| Direction1D | Actions variables allant de zéro à plein, comme la pédale d'accélérateur d'une voiture ou le niveau de zoom d'un viseur. |
| Direction2D | Mouvement directionnel 2D, comme la rotation de la caméra, ou le mouvement standard du personnage Roblox. |
| Direction3D | Mouvement directionnel 3D, comme un véhicule en l'air qui peut léviter vers le haut/bas, accélérer/décélérer et dériver à gauche/droite. |
| ViewportPosition | Coordonnées de viewport 2D telles que l'entrée de la souris, par exemple pour des curseurs personnalisés ou un raycasting pour sélectionner des objets du monde. |
Pour tester un InputAction pour le sprint simple d'un personnage :
Créez un nouveau InputAction à l'intérieur du contexte PlayContext dans ReplicatedStorage. Renommez-le en CharacterSprint pour indiquer son action dédiée.

Dans la fenêtre Propriétés, remarquez que le Type de l'action est Bool (par défaut). C'est un type logique pour le sprint simple d'un personnage en tant qu'action booléenne true/false (le personnage est soit en train de sprinter, soit non).

Liaisons d'entrée
Un InputBinding définit quelle liaison matérielle doit déclencher le parent InputAction, par exemple une pression de touche, un bouton de manette ou un tapotement sur un appareil tactile. Pour la compatibilité multiplateforme, chaque InputAction doit avoir un InputBinding pour manette, clavier/souris et tactile, comme illustré ici.

Le Type attribué à l'InputAction parent affecte directement quels types d'entrée généraux (touche/bouton/tap, déclencheur analogique, joystick, etc.) sont valables pour les instances InputBinding enfants. À son tour, les valeurs envoyées aux événements connectés du parent dépendent du type d'entrée choisi pour la liaison. Consultez événements d'entrée pour plus de détails sur la corrélation entre les types d'action, les liaisons et les valeurs de retour.
Pour connecter des liaisons pour le sprint simple d'un personnage :
Insérez un nouveau InputBinding dans l'action CharacterSprint et renommez-le en KeyboardBinding. Ensuite, définissez la propriété KeyCode de la liaison sur LeftShift.


Pour s'assurer que le verrouillage de la souris Shift n'interfère pas avec la liaison de touche, sélectionnez StarterPlayer dans l'explorateur et désactivez son EnableMouseLockOption dans la fenêtre Propriétés.


Insérez une seconde InputBinding dans l'action CharacterSprint et renommez-la en GamepadBinding. Ensuite, définissez la propriété KeyCode de la liaison sur ButtonY.


À l'intérieur d'un conteneur ScreenGui à l'intérieur de StarterGui, créez un bouton à l'écran, renommez-le en SprintButton, et positionnez/redimensionnez-le comme souhaité.


Insérez une troisième InputBinding dans l'action CharacterSprint et renommez-la en TouchBinding. Ensuite, dans la fenêtre Propriétés, liez la propriété UIButton de la liaison au bouton SprintButton que vous avez créé précédemment dans StarterGui.


Événements d'entrée
L'instance de InputAction dispose de trois événements intégrés pour gérer l'entrée du joueur provenant de InputBindings.
- StateChanged — Cet événement se déclenche pour tous les types d'action d'entrée chaque fois que l'état change, sauf si l'état tente de passer au même état.
En fonction du Type de l'action d'entrée (Bool, Direction1D, Direction2D, Direction3D, ou ViewportPosition) et du type d'entrée général provenant d'un InputBinding enfant (touche/bouton/tap, déclencheur analogique, joystick, etc.), différentes valeurs sont retournées aux gestionnaires d'événements Pressed, Released, et StateChanged. Examinez les tables suivantes pour mieux comprendre la corrélation.
Le type Bool est le mieux adapté pour les actions déclenchées telles que sauter, tirer, sprinter, etc. avec prise en charge des seuils appuyé/déclenché sur les entrées analogiques.
| Types d'Entrée Valides sur InputBindings | Retourné aux Événements InputAction |
|---|---|
| Entrées booléennes provenant des touches de clavier ou des boutons de souris/manette basiques via la propriété KeyCode de la liaison, ou une pression/déclenchement d'un GuiButton via la propriété UIButton de la liaison. |
|
| Quantités d'entrée variables provenant d'entrées analogiques comme les déclencheurs de manette (ButtonL2/ButtonR2) via la propriété KeyCode de la liaison. |
|
Pour connecter des événements pour le sprint simple d'un personnage :
Insérez un nouveau Script dans l'arborescence CharacterSprint, aux côtés des diverses liaisons d'entrée. Puis définissez son RunContext sur Client et renommez-le en OnActivate.

Collez le code suivant dans le script OnActivate. Notez la connexion d'événement Pressed sur les lignes 13‑15 qui double la vitesse de marche du personnage lorsque la liaison d'entrée de sprint est enfoncée, et la connexion d'événement correspondante Released sur les lignes 16‑18 qui réinitialise la vitesse de marche à la valeur par défaut lorsque la liaison d'entrée de sprint est relâchée.
OnActivate (Script Client)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)Testez votre jeu et essayez l'action de sprint du personnage avec les liaisons que vous avez choisies précédemment : LeftShift pour le clavier, ButtonY pour la manette, et le SprintButton à l'écran pour les appareils tactiles. N'oubliez pas que vous pouvez utiliser l'Émulateur de contrôleur pour tester les entrées de manette directement dans Roblox Studio.
Changements de contexte
Une fois que vous avez un contexte d'entrée tel que PlayContext, vous pouvez l'activer/désactiver pendant le gameplay via le script, changer sa Priority pour déterminer quelles actions prennent priorité sur d'autres, et Sink les entrées pour qu'elles ne soient pas traitées dans des contextes de priorité inférieure.
Pour faciliter le changement de contextes depuis d'autres scripts, insérez un nouveau BindableEvent dans votre dossier d'entrées à l'intérieur de ReplicatedStorage et renommez-le en ContextEvent.

Créez un nouveau Script au même niveau, définissez son RunContext sur Client, et renommez-le en UpdateContext.

À l'intérieur du script UpdateContext, collez le code suivant :
UpdateContext (Script Client)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Connecter l'événement bindablecontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContext non trouvé !")endend)Avec le script UpdateContext en place, vous pouvez maintenant mettre à jour un InputContext nommé en déclenchant l'événement bindable, par exemple depuis un LocalScript qui alimente un GuiButton à l'intérieur d'un conteneur ScreenGui.
Script de Boutonlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Déclencher l'événement bindable avec le contexte d'entrée cible et l'état activécontextEvent:Fire("PlayContext", true)end)
Liaisons par défaut
Roblox fournit des liaisons d'entrée par défaut pour le mouvement, le contrôle de la caméra et l'interaction de base avec l'environnement — les joueurs de Roblox sont familiers avec ces contrôles, vous ne devez donc les remplacer que dans des cas spécifiques. Notez également que les entrées réservées ne peuvent pas être remplacées et fonctionneront toujours avec leur objectif prévu.
| Action | Souris/Clavier | Manette | Tactile |
|---|---|---|---|
| Ouvrir le menu Roblox | Esc | Start bouton (ButtonStart) | N/A |
| Console développeur | F9 | N/A | N/A |
| Mode plein écran (Windows) Afficher le bureau (Mac) | F11 | N/A | N/A |
| Enregistrer une vidéo (Windows) | F12 | N/A | N/A |
| Prendre une capture d'écran | PrintScreen | N/A | N/A |