Apprenez l'Input System avec des tutoriels mis à jour et notre exemple de projet, Warriors

Avec l'Input System, vous pouvez rapidement configurer des commandes pour plusieurs plateformes, du mobile à la VR. Commencez avec nos exemples de projets et nos nouveaux tutoriels vidéo pour les débutants et les utilisateurs intermédiaires.
La saisie est au cœur de l'interactivité de vos projets en temps réel. Le système d'entrée d'Unity standardise la manière dont vous mettez en œuvre les contrôles et offre de nouvelles fonctionnalités avancées. Il est vérifié pour Unity 2019 LTS et les versions plus récentes (voir la documentation pour une liste complète des périphériques d'entrée pris en charge).
Nos nouveaux tutoriels peuvent vous aider à démarrer rapidement, même si vous êtes totalement novice en matière de développement pour plusieurs plateformes. Si vous êtes déjà familiarisé avec les flux de travail, découvrez comment utiliser l'Input System pour piloter d'autres outils Unity comme Cinemachine ou Unity UI avec Warriors, notre principal projet d'exemple.
Cette session "Meet the Devs" du mois de mars explique pourquoi nous avons créé ce nouveau système et comprend une démo qui décrit les flux de travail pour configurer le Multiplayer local, ajouter rapidement des contrôles au gamepad, faire apparaître de nouveaux joueurs et mettre en place des contrôles mobiles. Rene Damm, développeur principal de l'Input System, répond également aux questions du public sur l'outillage et la feuille de route de l'équipe.
Si vous êtes un débutant et que vous souhaitez simplement vous familiariser avec les flux d'entrée de base pour Unity, consultez le projet Roll-a-Ball mis à jour sur Unity Learn. Il vous guide à travers les premières étapes telles que l'installation du package Input System, l'ajout d'un composant d'entrée de lecteur et l'application de données d'entrée au lecteur.


Notre série de prototypes utilise également l'Input System, comme vous pouvez le voir dans cette vidéo et cet exemple de projet sur la création d'un boss avec une animation procédurale. La ressource d'action du vaisseau spatial utilise la saisie pour les commandes de mouvement, le tir de projectiles laser et l'augmentation de la vitesse.
Warriors est un projet qui démontre l'utilisation d'outils et d'API plus intermédiaires avec l'Input System dans une configuration typique de jeu multiplateforme local à la troisième personne. Elle est disponible pour Unity 2019 LTS et sera mise à jour pour la version 2020 LTS lors de sa sortie l'année prochaine. Vous pouvez télécharger le projet sur GitHub, où nous avons trois branches disponibles :
Le projet s'articule autour de personnages qui peuvent être contrôlés en mode solo et en mode Multiplayer local. Lorsque le gestionnaire de jeu est réglé sur Local Multiplayer, il instancie plusieurs instances du préfabriqué Warrior. Comme le préfabriqué Warrior est configuré pour utiliser le composant Player Input System, chaque instance du Warrior sera automatiquement associée à un périphérique d'entrée connecté.
Le système de contrôle de ce Warrior est conçu pour une utilisation multiplateforme et bascule automatiquement entre le clavier et les différentes manettes de jeu. Cette configuration fournit un exemple d'application d'un lissage aux données d'entrée brutes afin que le mouvement directionnel du personnage soit uniforme, quel que soit l'axe d'entrée (touches du clavier ou joystick du gamepad) utilisé par le joueur. Le schéma de contrôle suivant utilise également une pression sur un bouton pour une animation d'attaque de base.

La ressource d'action d'entrée du guerrier est également configurée pour deux cartes d'action différentes : l'une pour contrôler le personnage (courir et attaquer), et l'autre pour contrôler l'entrée dans le menu. Un jeu ou tout autre projet interactif comporte généralement différents états avec des exigences de contrôle différentes qui partagent les mêmes liaisons d'entrée.
Par exemple, si vous poussez un joystick dans une direction, le Warrior se dirigera vers cet axe. Cependant, lorsque le jeu est en pause, le joueur peut utiliser le joystick pour naviguer entre les différents boutons et options sélectionnables dans le menu de pause.
Grâce à l'Input System, vous pouvez facilement mettre en place différentes cartes d'action pour divers scénarios de contrôle et les modifier, par composant PlayerInput, au moment de l'exécution, à l'aide d'une API simple :
playerInput.SwitchCurrentActionMap(stringForMapName) ;
Une fois que vous avez mis en place un plan d'action pour interagir avec l'interface utilisateur, les actions peuvent être assignées au module d'entrée de l'interface utilisateur du système d'événements :

Dans le projet Warriors, chaque joueur peut mettre le jeu en pause et interagir avec le menu de pause. L'interface utilisateur superposée se compose de quelques boutons d'option et d'un panneau de changement de contexte sur la droite. Le module Input System UI Input applique les actions assignées à l'interaction avec n'importe quel composant Unity UI dont l'option Interactable est activée (comme les boutons et les curseurs).

Cette interaction avec l'interface utilisateur sera isolée pour le joueur qui a appuyé sur pause. Par exemple, si le joueur 3 met le jeu en pause, les joueurs 1 et 2 ne pourront pas interagir avec lui et seul le joueur 3 aura le contrôle. Lorsque le joueur 3 interrompt le jeu, toutes les commandes du joueur reprennent. Pour ce faire, nous appelons les méthodes suivantes sur un composant PlayerInput :
playerInput.ActivateInput() ;
playerInput.DeactivateInput();
Dans le menu de l'interface utilisateur, il y a un panneau contextuel pour les contrôles de rebond d'exécution. Cela vous permet d'effectuer un rebond interactif pour une action d'entrée spécifique et de lui attribuer une nouvelle liaison d'entrée. Par exemple, si vous utilisez une manette PlayStation, vous pouvez lier l'action d'attaque du bouton Croix à un autre bouton d'entrée tel que Triangle ou R2.

Ce rebind s'applique en tant qu'override à un composant PlayerInput spécifique. Par exemple, le joueur 2 pourra associer son bouton d'attaque à un autre bouton, mais cela n'affectera pas l'utilisation par le joueur 3 de son action d'entrée d'attaque.
L'API pour la mise en place d'un rebind interactif contient également une opération pour la fin du rebind. Cela vous permet de mettre en place votre propre contrôle lors de la mise à jour de l'interface utilisateur, de la sauvegarde de l'état du jeu ou de la modification de tout autre élément du jeu en fonction de cet événement.
private InputActionRebindingExtensions.RebindingOperation rebindOperation;
void StartInteractiveRebind()
{
rebindOperation = inputAction.PerformInteractiveRebinding().OnComplete(operation => RebindCompleted());
rebindOperation.Start();
}
void RebindCompleted()
{
rebindOperation.Dispose();
//Apply UI Changes (IE: New Binding Icon)
}
Outre l'intégration de l'Input System avec le système d'événements et l'Unity UI, le projet Warriors montre également comment il peut être configuré pour fonctionner de concert avec Cinemachine. Une configuration de caméra typique pour un jeu à la troisième personne comprend une caméra de suivi en orbite dont la direction de vue est définie par la position de la souris ou la direction de la poussée du joystick. Le composant Input Provider de Cinemachine peut être ajouté à un dispositif de caméra Free Look de Cinemachine, ce qui permet à une action Input d'envoyer des données d'axe Vector 2 directement dans les valeurs de contrôle d'axe de Cinemachine. Dans l'image ci-dessous, vous pouvez voir que le CinemachineInputProvider utilise les données d'entrée de l'action Look Input.

L'Input System contient également diverses API permettant à d'autres systèmes d'accéder à des données au moment de l'exécution, qui peuvent être affichées dans l'interface utilisateur ou d'autres éléments visuels. Le projet d'exemple Warriors utilise les données de Player Input pour afficher des informations telles que l'appareil du joueur en cours, l'ID de l'entrée du joueur ou même pour mettre à jour les contrôles de rebind basés sur l'interface utilisateur sur le binding en cours. Nous avons créé un système personnalisé qui prend les chaînes de l'appareil et de la liaison et renvoie une icône spécifique.
Par exemple, si le joueur utilise une manette Xbox et que l'action Attaque est liée au bouton contextuel Nord, l'icône du bouton Y s'affichera. Cependant, si le joueur utilise un clavier, il affichera une chaîne de caractères pour la touche du clavier actuellement liée. Vous pouvez extraire et utiliser cet outil de configuration de l'affichage des appareils dans vos propres projets.

Le paquet Input System contient également plusieurs échantillons supplémentaires que vous pouvez explorer dans le gestionnaire de paquets. Vous pouvez les utiliser comme référence et les étendre ou les adapter à vos propres projets. Vous y trouverez également la documentation officielle, y compris ce guide de démarrage rapide.
Input System 1.1 est actuellement en avant-première, et apporte de nombreuses corrections et quelques améliorations. Vous pouvez désormais enregistrer et charger les rebinds au format JSON (voir l'exemple de script RebindSaveLoad.cs) et Les layouts de périphériques peuvent désormais être précompilés, ce qui réduit considérablement le temps d'instanciation et le coût du tas du garbage collection (GC) pour ces périphériques.
Nous espérons que l'exemple de projet et les autres supports d'apprentissage vous aideront à commencer à utiliser l'Input System pour donner vie à vos idées. N'hésitez pas à nous faire part de ce que vous souhaitez apprendre ensuite dans la section des commentaires ci-dessous. Gardez également un œil sur la page Input System pour d'autres tutoriels et d'autres ressources.
