Comment créer un contrôleur de jeu personnalisé avec Arduino et Unity

Comment créer un contrôleur de jeu personnalisé avec Arduino et Unity / DIY

Avez-vous déjà voulu concevoir votre propre contrôleur de jeu? C'est plus facile que vous ne le pensez!

Dans ce court projet, nous allons construire un contrôleur de jeu personnalisé simple à utiliser avec le moteur de jeu Unity. Ce contrôleur sera alimenté par un Arduino Uno, bien que vous puissiez utiliser l’une des nombreuses alternatives Guide d’achat Arduino: Quelle carte devriez-vous obtenir? Guide d'achat Arduino: Quel conseil choisir? Il y a tellement de types de cartes Arduino que vous ne pouvez pas vous tromper Que devriez-vous acheter pour votre projet? Laissez-nous vous aider avec ce guide d'achat Arduino! Lisez-en plus sur ce projet aussi. Nous allons également créer un jeu de base où vous utiliserez votre contrôleur pour éviter la chute d'objets et ralentir le temps.

Pour ce projet, vous aurez besoin

  • Arduino ou microcontrôleur similaire
  • 1 x résistance 10k Ohm
  • 1 x interrupteur momentané
  • 1 x potentiomètre
  • Fils de connexion
  • Une planche à pain
  • Moteur de jeu Unity
  • Le plugin Uniduino de Unity Asset Store (30 $)
  • Code de projet complet, au cas où vous ne voudriez pas l'écrire (n'inclut pas le plugin Uniduino)

La plupart de ces éléments sont disponibles dans un kit de démarrage Arduino. Si vous ne possédez pas de kit de démarrage, consultez notre guide pour choisir les meilleurs 4 meilleurs kits de démarrage pour les débutants Arduino. 4 meilleurs kits de démarrage pour les débutants Arduino. Il existe de nombreux excellents projets Arduino pour débutants que vous pouvez utiliser pour démarrer besoin d'un Arduino et de certains composants en premier. Voici notre sélection de 4 des meilleurs kits de démarrage pour… Read More one for you.

Vous pouvez rendre votre manette aussi compliquée que vous le souhaitez, mais pour cet exemple, nous allons configurer un potentiomètre et un bouton, ce qui est parfait pour contrôler un simple jeu d'arcade..

Assemblage de votre contrôleur

Configurez votre planche à pain et votre Arduino comme indiqué dans l'image ci-dessous. C’est ce que nous allons utiliser comme contrôleur de jeu, bien que vous puissiez utiliser pratiquement la même configuration qu’un contrôleur midi bricolage. Comment créer un contrôleur MIDI avec un Arduino Comment créer un contrôleur MIDI avec un Arduino En tant que musicien qui a amassé une collection d’instruments de musique et de boîtes à sons, l’humble Arduino est l’outil idéal pour créer un contrôleur MIDI personnalisé. Lire plus aussi!

Préparer votre Arduino

Une fois que tout est câblé, connectez votre Arduino via USB. Dans Arduino Software IDE, dirigez-vous vers Outils> Tableau et Outils> Port pour sélectionner le microcontrôleur et le port que vous utilisez. L’IDE Arduino est fourni avec l’esquisse dont nous avons besoin et vous pouvez le trouver sous Fichier> Exemples> Firmata> StandardFirmata. Cliquez sur Upload et vous serez prêt à partir.

Si vous êtes nouveau sur Arduino et que votre tête fond légèrement, consultez notre Guide du débutant Démarrer avec Arduino: Guide du débutant Démarrer avec Arduino: Guide du débutant Arduino est une plate-forme de prototypage électronique à code source ouvert basée sur utiliser du matériel et des logiciels. Il est destiné aux artistes, concepteurs, amateurs et à toute personne intéressée par la création d'objets ou d'environnements interactifs. Lisez-en plus pour vous aider à bien parler avec votre ordinateur.

Configuration de votre projet Unity

En unité, ouvert Fenêtre> Asset Store accéder à Asset Store de Unity à partir de l’éditeur Unity. Recherchez dans le Asset Store le plug-in Uniduino. Ce plugin vous permettra de recevoir et d'envoyer des données depuis et vers vos pins Arduino à l'intérieur de Unity. Le plugin au moment de l'écriture coûte 30 $. Il est possible de faire ce projet sans acheter le plugin, bien que ce soit un peu plus compliqué et que le plugin soit plus pratique.

Cette vidéo des créateurs du plug-in vous guide tout au long du processus de test de tout ce qui fonctionne, ainsi que de la première installation. Notez que vous devrez peut-être également réinitialiser l’éditeur Unity sous Windows..

Nous pouvons utiliser ce même panneau de test pour tester notre contrôleur. Réglez la broche D2 sur INPUT et Digital. Plus bas, définissez la broche A5 sur ANALOG. Votre potentiomètre et votre bouton doivent maintenant afficher les valeurs à l’écran à côté de leurs numéros de broche. Le progrès!

Maintenant, pour faire quelque chose que nous pouvons contrôler

Nous avons donc un contrôleur, mais que devons-nous contrôler? Les possibilités sont infinies, mais pour aujourd'hui, nous allons créer un jeu d'esquive très simple pour tester notre nouveau système de contrôle. Nous allons passer rapidement sur la configuration du jeu. Par conséquent, si vous êtes totalement novice dans le moteur Unity, vous trouverez peut-être notre Guide du débutant pour la programmation de jeux Programmation d'un jeu avec Unity: Guide du débutant Paysage du développement de jeux vidéo indépendants, Unity s’est imposé comme une norme de facto: son faible coût, sa facilité d’utilisation et son large éventail de fonctionnalités le rendent idéal pour le développement rapide de jeux. Lire plus utile pour vous repérer.

Nous allons construire un jeu très basique dans lequel votre but est d'esquiver votre sphère vers la gauche et la droite pour éviter les cubes en chute, ce qui utilisera votre nouveau contrôleur personnalisé..

Créez une nouvelle scène et faites glisser le préfabriqué Uniduino de Atouts> Uniduino> Prefabs dans votre hiérarchie et faites glisser le préfabriqué Uniduino dans la hiérarchie. Nous en avons besoin pour faire la conversation entre notre jeu et le contrôleur.

Dans la hiérarchie des unités, cliquez sur Créer> Sphère et utilisez l'onglet Transformer de l'inspecteur pour le déplacer au bas de l'écran de jeu..

Il est temps de coder

Maintenant, ajoutez du code à cette fête. Avec la sphère sélectionnée dans la hiérarchie, cliquez sur Ajouter un composant> Nouveau script au bas de sa fenêtre Inspecteur. Nomme le SphèreMover et sélectionnez C Sharp dans le menu déroulant. Cliquez sur Créer et ajouter et le script sera ajouté à la GameObject. Double-cliquez dessus pour ouvrir le script et entrez le code suivant:

utiliser UnityEngine; using System.Collections; utiliser Uniduino; public class sphereMover: MonoBehaviour // Les en-têtes ne sont pas nécéssaires, mais facilitent la vie dans l'inspecteur. [En-tête ("Variables Arduino")] // nous devons déclarer l'Arduino en tant que variable publique Arduino arduino; // nous devons déclarer un entier pour le numéro de broche de notre potentiomètre, // rendre ces variables publiques signifie que nous pourrons les modifier ultérieurement dans l'éditeur // si nous modifions la présentation de notre arduino public int potPinNumber; // une variable float pour conserver la valeur du potentiomètre (0 - 1023) public float potValue; // nous allons plus tard remapper ce potValue à la position y de notre capsule et le conserver dans cette variable public float mappedPot; // public int pour notre bouton pin public int buttonPinNumber; [En-tête ("Sphère Variables")] // variables pour contenir les valeurs notées précédemment pour les côtés de notre écran public float leftEdge; float public rightEdge; // Utilisez ceci pour l'initialisation void Start () // et initialisons-le en commençant par la variable Arduino. // nous n'utilisons qu'un arduino, nous pouvons donc utiliser Arduino.global pour le récupérer. arduino = Arduino.global; arduino.Setup (ConfigurePins);  void ConfigurePins () // configure la broche Arduino pour qu'elle soit analogique pour notre potentiomètre arduino.pinMode (potPinNumber, PinMode.ANALOG); // Dites à l'Arduino de signaler toute modification de la valeur de notre potentiomètre arduino.reportAnalog (5, 1); // configure notre bouton pin arduino.pinMode (buttonPinNumber, PinMode.INPUT); arduino.reportDigital ((byte) (buttonPinNumber / 8), 1); 

Prenez un moment pour lire les commentaires du code. Jusqu'à présent, nous avons déclaré certaines variables pour notre Arduino, ses broches et notre Sphère. Nous avons également utilisé le
Méthodes Start et ConfigurePins pour initialiser notre Arduino au moment de l’exécution. Permet de sauvegarder notre script et de revenir dans l'éditeur Unity pour voir ce qui a changé.

Nous pouvons maintenant voir nos variables publiques dans la fenêtre Inspecteur. Voyons ce que nous pouvons entrer à ce stade pour nous aider plus tard. Nous savons quelle épingle nous utilisons sur l'Arduino de notre version précédente, nous pouvons y entrer. Grâce à notre expérience, nous savons également à quel point nous voulons que notre sphère puisse se déplacer à gauche et à droite pour ne pas tomber de l'écran. Permet d'entrer ces valeurs maintenant.

Premiers signes de vie

Il est temps de voir réellement les valeurs de notre Arduino dans l'éditeur Unity. Pour l'instant, nous pouvons ajouter une ligne de code à la fonction de mise à jour de notre script sphereMover, puis enregistrer à nouveau le script..

void Update () // Nous attribuons la valeur que l'arduino lit de notre potentionmeter à notre variable potValue. potValue = arduino.analogRead (potPinNumber);  

Maintenant que notre variable potValue est mise à jour chaque image, nous pouvons voir sa valeur en temps réel dans l'inspecteur de l'unité. Avant de faire un test, le moment est venu de vérifier que le plug-in Uniduino écoute sur le bon port. Cliquez sur Uniduino dans la hiérarchie et vérifiez que c'est le nom du port dans l'inspecteur. S'il est vide, indiquez le numéro de port correct pour votre Arduino. Dans ce cas, c’était COM4, ​​bien que cela puisse être différent pour vous. Vérifiez à l'aide de l'IDE Arduino si vous n'êtes pas sûr.

Sélectionnez votre sphère dans la hiérarchie et cliquez sur le bouton Lecture en haut de l'écran. Le système a besoin de quelques secondes pour s'initialiser, après quoi vous devriez commencer à voir la variable de la valeur du pot changer dans l'inspecteur lorsque vous déplacez le potentiomètre..

Maintenant nous parlons! Eh bien, à proprement parler, Unity et les Arduino parlent, mais qui compte? Si vous en êtes à ce stade et que la valeur ne change pas dans l'inspecteur, vérifiez les étapes de configuration et assurez-vous que vous avez sélectionné le bon port pour votre Arduino..

Déplaçons cette sphère

Maintenant que nous avons mis à jour la variable potValue, nous souhaitons utiliser cette valeur pour déplacer notre sphère. Lorsque le potentiomètre est complètement à gauche, nous souhaitons que la sphère soit à gauche de l'écran, et inversement. Les objets dans Unity sont positionnés en un point de l'espace vectoriel, déterminés par les valeurs de son fichier Transform.position. Dans l'image ci-dessous, où la sphère est au point le plus à gauche, nous le voudrions, vous pouvez voir que son vecteur de position est 9.5, -4, 0.

Nous voulons affecter la position X de la sphère. Malheureusement, utiliser directement les valeurs de notre potentiomètre ne fonctionnera pas, car lorsque le potentiomètre est complètement à gauche, il donne la valeur 0 - ce qui placerait notre sphère au centre de l'écran. À l'autre extrême, la valeur la plus élevée du potentiomètre, 1023, placerait le cube de manière très éloignée à droite de notre écran. Pas utile. Ce dont nous avons besoin ici, c'est du calcul.

Pourquoi faire des maths quand l'unité le fera pour vous?

Pour ceux d'entre vous qui craignez de regarder un morceau de papier couvert de chiffres absurdes (bien qu'il existe de très bons sites Web, les 20 sites Web dont vous avez besoin pour apprendre les mathématiques, étape par étape. Les 20 sites Web dont vous avez besoin pour apprendre les mathématiques, étape par étape. Nous avons compilé le meilleurs sites pour chaque niveau afin que vous puissiez apprendre systématiquement, mieux comprendre les mathématiques, un niveau à la fois, et vous amuser! Lire Plus qui peut vous aider à apprendre les mathématiques), ne craignez pas. Nous avons besoin d'un moyen de faire en sorte que les valeurs de nos potentiomètres correspondent à la position X de notre sphère. Heureusement, nous pouvons utiliser un Méthode d'extension.

Une méthode d'extension est un script qui effectue un travail spécifique pour nous. Dans ce cas, nous lui donnons les valeurs que nous avons et il les renvoie mappées les unes aux autres, prêtes à être utilisées dans notre SphèreMover scénario. En haut du panneau Projet, cliquez sur Créer> Script C # et nommez-le ExtensionMethods. Entrez le code ci-dessous dans le script:

utiliser UnityEngine; using System.Collections; public static class ExtensionMethods // notre fonction pratique dappy Remapper public static float Remap (cette valeur float, float from1, float to1, float from2, float to2) return (value - from1) / (to1 - from1) * (to2 - from2) + from2; 

Enregistrez le script et retournez à votre script sphereMover. Nous pouvons maintenant utiliser cette fonction de remappage dans notre script ExtensionMethods dans notre fonction de mise à jour pour convertir les valeurs de nos potentiomètres en valeurs utilisables dans notre jeu. Sous l'endroit où nous venons d'assigner la variable potValue, tapez ce qui suit:

L'invite nous indique que notre remappage prend deux ensembles de valeurs De et À et les mappe ensemble. Nous pouvons entrer nos valeurs dans cette.

mappedPot = potValue.Remap (0, 1023, leftEdge, rightEdge);

Enregistrez votre script, revenez dans l'éditeur Unity et appuyez sur le bouton de lecture. Vous devriez maintenant voir que la variable Mapped Pot change lorsque vous déplacez le potentiomètre pour correspondre aux valeurs que nous avons déterminées pour nos bords gauche et droit. Prenez un moment pour vous asseoir et remercier votre script ExtensionMethods. Pas une calculatrice en vue.

Remarque: si vous remarquez que vos valeurs sont inversées, si votre potentiomètre est complètement à droite, vous obtenez une valeur négative pour votre variable Mapped Pot, il se peut que votre potentiomètre soit réglé dans le mauvais sens. Heureusement, vous pouvez résoudre ce problème sans refaire le câblage. Vous pouvez simplement changer les valeurs lorsque vous les remappez:

Nous avons enfin des valeurs utilisables. Reste maintenant à assigner ces valeurs à la position X de notre sphère:

// Assigne la valeur du pot mappé à la position x de la sphère transform.position = new Vector3 (mappedPot, transform.position.y, transform.position.z);

Enregistrez votre script, revenez dans l'éditeur Unity et appuyez sur Play. Vous devriez maintenant pouvoir déplacer votre sphère vers la gauche et la droite en utilisant votre potentiomètre!

Mettre le bouton au travail

Maintenant que notre sphère est en mouvement, ne serait-il pas agréable de pouvoir ralentir un peu les choses lorsque nous sommes dans une situation difficile? Nous allons utiliser notre bouton pour ralentir le temps dans notre jeu. Ouvrez votre script sphereMover et ajoutez ce code à votre fonction de mise à jour.

// si Unity détecte que le bouton est enfoncé, l'échelle de temps ralentit si (arduino.digitalRead (buttonPinNumber) == 1) Time.timeScale = 0.4f;  else Time.timeScale = 1.0f;

Maintenant que nous avons les mécanismes de notre jeu, ajoutons quelques obstacles! Nous allons utiliser l'ennemi naturel de la sphère, le cube. Dans la hiérarchie, cliquez sur Créer> Objet 3d> Cube. Dans l'inspecteur du cube, Ajouter un composant> Physique> Rigidbody. Définissez la valeur Drag du corps rigide sur 5. En outre, sous le composant Box Collider de l'inspecteur, sélectionnez Is Trigger. Cela nous permettra de détecter les collisions avec notre sphère.

Créez un script sur le cube et appelez-le collideWithSphere, ouvrez le script et supprimez les fonctions de démarrage et de mise à jour car nous n'en aurons plus besoin cette fois-ci. Entrez ce code:

utiliser UnityEngine; using System.Collections; Classe publique collideWithSphere: MonoBehaviour void OnTriggerEnter (Collider other) Destroy (other.gameObject); 

OnTriggerEnter envoie un message chaque fois que le collisionneur de déclenchement frappe un autre collisionneur. Dans ce cas, nous lui disons de détruire tout ce qui le touche. Enregistrez le script et retournez dans l'éditeur Unity. Faites glisser le cube de la hiérarchie vers le panneau Projet. Vous remarquerez que le texte du cube dans la hiérarchie est devenu bleu. En effet, nous avons créé un préfabriqué et l’avons sauvegardé dans notre projet. Supprimer votre cube de la hiérarchie maintenant.

Tout ce dont nous avons besoin maintenant, c'est d'un script pour générer les cubes. Dans la hiérarchie, cliquez sur Créer> Créer vide, et renommez-le en Game Manager dans l'inspecteur et ajoutez-y un script appelé gameManager. Ouvrez le script et ajoutez ce code:

utiliser UnityEngine; using System.Collections; classe publique gameManager: MonoBehaviour // une variable pour contenir le préfabriqué que nous voulons générer, le cube GameObject public; // nous voulons que certaines variables décident de la manière dont les cubes doivent apparaître // et de la hauteur au dessus de nous, nous voulons qu'ils se reproduisent public int numberToSpwan; flottant public lowSpawnheight; public float highSpawnheight; // Utiliser ceci pour l'initialisation void Start () pour (int i = 0; i < numberToSpwan; i++)  Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);   // Update is called once per frame void Update ()   

Enregistrez le script. De retour dans l'éditeur, sélectionnez le gestionnaire de jeu dans la hiérarchie et faites glisser votre préfabriqué de cube du panneau de projet vers la variable Cube de l'inspecteur. Remplissez les valeurs pour votre frai ici aussi. Vous pouvez le manipuler pour le rendre aussi dur ou facile que vous le souhaitez. Notez qu'il est intéressant que vos cubes les plus bas apparaissent suffisamment haut pour permettre à Uniduino de s'initialiser - perdre le jeu avant de pouvoir bouger peut être frustrant.!

Le projet fini

Maintenant, lorsque vous appuyez sur Play, les cubes apparaissent au-dessus de vous et tombent. Vous pouvez utiliser votre potentiomètre pour les éviter et votre bouton pour ralentir le temps.

Dans ce projet, nous avons créé un contrôleur personnalisé avec un Arduino, configuré Unity et Uniduino pour communiquer avec lui et créé un jeu simple pour le tester. Les concepts décrits ici peuvent s’appliquer à presque tous les projets. Il existe même des jeux vidéo spécialisés dans les contrôleurs personnalisés..

Avec Arduino et Unity, vous pouvez créer un contrôleur personnalisé à partir de presque tout. Avez-vous créé une chaîne hi-fi qui contrôle un vaisseau spatial? Un grille-pain qui contrôle un jeu de plate-forme?

Si vous avez fait un projet comme celui-ci, j'aimerais le voir! Postez-le dans les commentaires ci-dessous!

En savoir plus sur: Arduino, Contrôleur de jeu, Développement de jeu, Programmation.