Come creare un controller di gioco personalizzato con Arduino e Unity

Hai mai desiderato progettare il tuo controller di gioco? È più facile di quanto pensi!

Hai mai desiderato progettare il tuo controller di gioco?  È più facile di quanto pensi!
Annuncio pubblicitario

Hai mai desiderato progettare il tuo controller di gioco? È più facile di quanto pensi!

In questo breve progetto costruiremo un semplice controller di gioco personalizzato da utilizzare con il motore di gioco Unity. Questo controller sarà alimentato da un Arduino Uno, sebbene tu possa utilizzare una delle molte alternative Guida all'acquisto di Arduino: quale scheda dovresti ottenere? Guida all'acquisto di Arduino: quale scheda si dovrebbe ottenere? Ci sono così tanti diversi tipi di tavole Arduino là fuori, ti verrebbe perdonato per essere stato confuso. Quale dovresti comprare per il tuo progetto? Aiutaci, con questa guida all'acquisto di Arduino! Leggi di più là fuori anche per questo progetto. Creeremo anche un gioco di base in cui utilizzerai il controller per evitare di far cadere oggetti e rallentare i tempi.

Per questo progetto di cui hai bisogno

  • Arduino o microcontrollore simile
  • 1 resistenza da 10k Ohm
  • 1 x interruttore momentaneo
  • 1 x potenziometro
  • Cavi di collegamento
  • Una breadboard
  • Unity game engine
  • Il plugin Uniduino da Unity Asset Store ($ 30)
  • Completa il codice del progetto, se non vuoi scriverlo (non include il plugin Uniduino)

La maggior parte di queste cose sono disponibili in un kit di avvio Arduino. Se non hai uno starter kit consulta la nostra guida per la scelta dei migliori 4 migliori kit di avvio per Arduino Beginners 4 migliori kit di avvio per i principianti di Arduino Ci sono un sacco di ottimi progetti per principianti Arduino che puoi usare per iniziare, ma tu serve prima un Arduino e alcuni componenti. Ecco la nostra selezione di 4 dei migliori kit di avvio per ... Per saperne di più uno per voi.

Puoi rendere il tuo controller il più complicato possibile, anche se per questo esempio imposteremo un potenziometro e un pulsante, perfetti per controllare un semplice gioco arcade.

Breadboard del controller personalizzato 670

Assemblare il controller

Configura la tua breadboard e Arduino come mostrato nell'immagine qui sotto. Questo è quello che useremo come controller di gioco, anche se potresti usare quasi la stessa configurazione di un controller midi DIY Come creare un controller MIDI con un Arduino Come fare un controller MIDI con un Arduino Come un musicista che ha accumulato una collezione di strumenti musicali e noise boxes, l'umile Arduino è lo strumento perfetto per creare un controller MIDI personalizzato. Leggi di più anche tu!

Diagramma di Fritzing annotato

Preparare il tuo Arduino

Una volta collegato tutto, collega il tuo Arduino via USB. In Arduino Software IDE vai su Strumenti> Schede e strumenti> Porta per selezionare quale microcontrollore e porta stai usando. L'IDE Arduino viene fornito in bundle con lo schizzo di cui abbiamo bisogno e lo puoi trovare in File> Esempi> Firmata> StandardFirmata . Fai clic su Carica e sarai pronto per partire.

Se sei nuovo di Arduino e la tua testa si sta sciogliendo leggermente, consulta la nostra Guida per principianti. Guida introduttiva ad Arduino: Guida per principianti Guida introduttiva ad Arduino: Guida per principianti Arduino è una piattaforma di prototipazione elettronica open source basata su flessibile, facile da usare. utilizzare hardware e software. È pensato per artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. Leggi altro per aiutarti a parlare bene con il tuo computer.

Impostazione del tuo progetto Unity

In Unity, apri Window> Asset Store per accedere a Asset Store di Unity da Unity Editor. Cerca nel negozio di asset per il plug-in Uniduino. Questo plugin ti consentirà di ricevere e inviare dati da e verso i tuoi pin Arduino all'interno di Unity. Il plug-in al momento della scrittura costa $ 30. È possibile fare questo progetto senza acquistare il plugin, anche se è piuttosto complicato e potresti trovare il plugin più conveniente a tutto tondo.

Unity Asset Store Uniduino

Questo video dei creatori del plugin ti porta attraverso il processo di testare tutto ciò che funziona, insieme alla configurazione iniziale. Si noti che potrebbe essere necessario resettare l'editor Unity su Windows.

Possiamo utilizzare questo stesso pannello di test per testare il nostro controller. Impostare il pin D2 su INPUT e Digital. Più in basso, impostare Pin A5 su ANALOG. Il potenziometro e il pulsante dovrebbero visualizzare i valori sullo schermo accanto ai loro numeri di pin ora. Progresso!

Uniduino Test

Ora per fare qualcosa che possiamo controllare

Quindi abbiamo un controller, ma cosa dobbiamo controllare? Bene, le possibilità sono infinite, ma per oggi dovremo creare un gioco di schivata molto semplice per testare il nostro nuovo sistema di controllo. Ci sposteremo abbastanza velocemente nella configurazione del gioco, quindi se sei totalmente nuovo nel motore di Unity puoi trovare la nostra Guida per principianti di Unity Game Programming Programmazione di un gioco con l'unità: Guida per principianti Programmazione di un gioco con l'unità: una guida per principianti Nell'evolversi panorama dello sviluppo di giochi indie, Unity è emerso come uno standard de facto: il basso costo, la facilità d'uso e l'ampia gamma di funzioni lo rendono ideale per lo sviluppo rapido del gioco. Ulteriori informazioni utili per orientarsi.

Costruiremo un gioco molto semplice in cui il tuo obiettivo è quello di schivare la tua sfera a sinistra e a destra per evitare di cadere cubi, che utilizzerà il controller personalizzato appena creato.

Crea una nuova scena e trascina il prefabbricato Uniduino da Risorse> Uniduino> Prefabbricati nella tua gerarchia e trascina il prefabbricato Uniduino nella gerarchia. Ne abbiamo bisogno per parlare tra il nostro gioco e il controller.

Nella gerarchia Unity fai clic su Crea> Sfera e utilizza la scheda Trasforma in Impostazioni per spostarlo nella parte inferiore della schermata di gioco.

Inspector Sphere X Position

È tempo di ottenere il codice

Ora per aggiungere del codice a questa festa. Con la sfera selezionata nella Gerarchia, fai clic su Aggiungi Componente> Nuovo Script nella parte inferiore della finestra dell'Inspector. Chiamalo Sfera e seleziona C Sharp dal menu a discesa. Fai clic su Crea e aggiungi e lo script verrà aggiunto a GameObject. Fare doppio clic su di esso per aprire lo script e inserire questo codice:

using UnityEngine; using System.Collections; using Uniduino; public class sphereMover : MonoBehaviour { //Headers aren't scrictly neccesary, but they make life easier back in the Inspector. [Header("Arduino Variables")] //we need to declare the Arduino as a variable public Arduino arduino; //we need to declare an integer for the pin number of our potentiometer, //making these variables public means we can change them in the editor later //if we change the layout of our arduino public int potPinNumber; //a float variable to hold the potentiometer value (0 - 1023) public float potValue; //we will later remap that potValue to the y position of our capsule and hold it in this variable public float mappedPot; //public int for our button pin public int buttonPinNumber; [Header("Sphere Variables")] //variables to hold the values we noted earlier for the sides of our screen public float leftEdge; public float rightEdge; // Use this for initialization void Start () {//and initialize we shall, starting with the Arduino Variable. //we are only using one arduino, so we can use Arduino.global to grab it. arduino = Arduino.global; arduino.Setup(ConfigurePins); } void ConfigurePins() { //configure the Arduino pin to be analog for our potentiometer arduino.pinMode(potPinNumber, PinMode.ANALOG); //Tell the Arduino to report any changes in the value of our potentiometer arduino.reportAnalog(5, 1); //configure our Button pin arduino.pinMode(buttonPinNumber, PinMode.INPUT); arduino.reportDigital((byte)(buttonPinNumber / 8), 1); } } 

Prenditi un momento per leggere i commenti del codice. Finora, abbiamo dichiarato alcune variabili per il nostro Arduino, i suoi pin e la nostra sfera. Abbiamo anche usato il
Start e ConfigurePins per inizializzare il nostro Arduino in fase di esecuzione. Salviamo il nostro script e torniamo nell'editor Unity per vedere cosa è cambiato.

Script Mover Sphere con variabili vuote

Ora possiamo vedere le nostre variabili pubbliche nella finestra dell'Inspector. Vediamo cosa possiamo entrare in questa fase per aiutarci più tardi. Sappiamo quali pin stiamo usando su Arduino dalla nostra build in precedenza, possiamo inserirli. Sappiamo anche dal nostro esperimento prima di quanto lontano vogliamo che la nostra sfera sia in grado di viaggiare a sinistra ea destra in modo che non cada dallo schermo. Inseriamo questi valori ora.

Script Sphere Mover con variabili

Primi segni di vita

È tempo di vedere i valori dal nostro Arduino all'interno di Unity Editor. Per ora, possiamo aggiungere una riga di codice alla nostra funzione di aggiornamento dello script sphereMover e salvare di nuovo lo script.

 void Update () { //We assign the value the arduino is reading from our potentionmeter to our potValue variable potValue = arduino.analogRead(potPinNumber); } 

Ora che abbiamo la nostra variabile potValue aggiornata ogni frame, possiamo vedere il suo valore in tempo reale in Unity Inspector. Prima di dargli un test, ora sarebbe un buon momento per verificare che il plug-in Uniduino stia ascoltando sulla porta giusta. Fai clic su Uniduino in the Heirarchy e controlla il suo Port Name nell'Inspector. Se è vuoto, inserisci il numero di porta corretto per Arduino. In questo caso era COM4, ​​anche se potrebbe essere diverso per te. Verifica se usi l'IDE Arduino se non sei sicuro.

Uniduino Check Port è corretto

Seleziona la sfera nella gerarchia e fai clic sul pulsante Riproduci nella parte superiore dello schermo. Il sistema necessita di alcuni secondi per l'inizializzazione, dopodiché dovresti iniziare a vedere la variazione della variabile Pot Value nell'ispettore quando muovi il potenziometro.

Segni di vita 2

Adesso stiamo parlando! Bene, in senso stretto Unità e l'Arduino stanno parlando, ma chi sta contando? Se sei arrivato così lontano e non vedi il cambio di valore nell'ispettore, controlla i passaggi di configurazione e assicurati di aver selezionato la porta corretta per Arduino.

Spostiamo questa sfera

Ora che abbiamo aggiornato la variabile potValue in fase di aggiornamento, vogliamo utilizzare questo valore per spostare la nostra sfera. Quando il potenziometro è completamente a sinistra, vogliamo che la sfera si trovi sul lato sinistro dello schermo e viceversa. Gli oggetti in Unity sono posizionati in un punto nello spazio Vector, determinato dai valori di Transform.position. Nell'immagine in basso, dove la sfera si trova nel punto più lontano a sinistra, lo vorremmo, puoi vedere che il suo vettore di posizione è 9, 5, -4, 0.

Trasforma l'esempio 670

Vogliamo influenzare la posizione X della sfera. Sfortunatamente l'uso dei valori dal nostro potenziometro non funzionerà direttamente, poiché quando il potenziometro è completamente a sinistra, dà un valore di 0 - che metterebbe la nostra sfera proprio nel mezzo dello schermo. All'altro estremo, il valore superiore del potenziometro, 1023, posizionerebbe la via del cubo a destra del nostro schermo. Inutile. Quello di cui abbiamo bisogno qui è un po 'di matematica.

Perché fare matematica quando l'unità lo farà per te?

Per quelli di voi là fuori che temono fissando un pezzo di carta ricoperto di numeri senza senso (anche se ci sono alcuni grandi siti Web I 20 siti web che devi imparare la matematica passo dopo passo I 20 siti web che devi imparare la matematica passo dopo passo Abbiamo compilato il i migliori siti per ogni livello in modo che possiate imparare sistematicamente, acquisire una conoscenza migliore della matematica un livello alla volta e divertirvi! Ulteriori informazioni possono aiutarti ad apprendere la matematica), non temere. Abbiamo bisogno di un modo per fare in modo che i nostri valori del potenziometro corrispondano alla posizione X della nostra sfera. Fortunatamente, possiamo usare un metodo di estensione .

Un metodo di estensione è uno script che fa un lavoro specifico per noi. In questo caso, gli diamo i valori che abbiamo, e li restituisce mappati l'uno con l'altro, pronti per essere usati nel nostro script sphereMover . Nella parte superiore del pannello Progetto, fare clic su Crea> Script C # e denominarlo ExtensionMethods. Inserisci il codice qui sotto nella sceneggiatura:

 using UnityEngine; using System.Collections; public static class ExtensionMethods { //our handy dandy Remapper function public static float Remap (this float value, float from1, float to1, float from2, float to2) { return (value - from1) / (to1 - from1) * (to2 - from2) + from2; } } 

Salva lo script e torna allo script sphereMover. Ora possiamo usare questa funzione di rimappatura nel nostro script ExtensionMethods nella nostra funzione di aggiornamento per convertire i valori del potenziometro in valori utilizzabili nel nostro gioco. Sotto il punto in cui abbiamo appena assegnato la variabile potValue, digita quanto segue:

Rimappa funzione

Il prompt indica che il nostro Remap prende due serie di valori From e To e li mappa insieme. Possiamo inserire i nostri valori in questo.

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

Salva il tuo script, torna all'editor di Unity e premi il pulsante di riproduzione. Ora dovresti vedere che la variabile del vaso mappato cambia quando muovi il potenziometro, per corrispondere ai valori che abbiamo determinato per i nostri bordi sinistro e destro. Prenditi un momento per sederti e ringrazia il tuo script ExtensionMethods. Non una calcolatrice in vista.

Pot di mappatura

Nota: se stai notando che i tuoi valori sono invertiti, così quando il tuo potenziometro è completamente a destra ottieni un valore negativo per la tua variabile del Piatto mappato, potresti avere il potenziometro impostato nel modo sbagliato. Fortunatamente, puoi sistemarlo senza ricablare. Puoi semplicemente cambiare i valori quando li rimappi:

Cambia rimappa

Ora finalmente abbiamo valori utilizzabili. Ora tutto ciò che resta da fare è assegnare quei valori alla posizione X della nostra sfera:

 //Assign the mapped pot value to the sphere's x position transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z); 

Salva il tuo script, torna all'editor di Unity e premi Play. Ora dovresti essere in grado di spostare la sfera a sinistra e a destra usando il potenziometro!

Mettere il pulsante al lavoro

Ora che abbiamo la nostra sfera in movimento, non sarebbe bello avere un modo per rallentare un po 'le cose quando arriviamo in una posizione ristretta? Useremo il nostro pulsante per rallentare il tempo nel nostro gioco. Apri lo script sphereMover e aggiungi questo codice alla funzione di aggiornamento

 //if Unity detects the button is being pressed, the time scale slows down if (arduino.digitalRead(buttonPinNumber) == 1){ Time.timeScale = 0.4f; } else Time.timeScale = 1.0f; 

Ora abbiamo i meccanismi del nostro gioco, aggiungiamo alcuni ostacoli! Useremo il nemico naturale della sfera, il cubo. Nella gerarchia, fare clic su Crea> Oggetto 3D> Cubo . Nell'ispettore del cubo, Aggiungi componente> Fisica> Corpo rigido . Impostare il valore Trascinamento del corpo rigido su 5. Inoltre, sotto il componente Collimatore di caselle nell'ispettore, selezionare Is Trigger. Questo ci permetterà di individuare le collisioni con la nostra sfera.

Crea uno script sul cubo e chiamalo collideWithSphere, apri lo script ed elimina le funzioni Start e Aggiorna poiché questa volta non avremo bisogno di loro. Inserisci questo codice:

 using UnityEngine; using System.Collections; public class collideWithSphere : MonoBehaviour { void OnTriggerEnter(Collider other) { Destroy(other.gameObject); } } 

OnTriggerEnter invia un messaggio ogni volta che il collisore di trigger colpisce un altro collisore. In questo caso, stiamo dicendo di distruggere tutto ciò che tocca. Salva lo script e torna all'editor Unity. Trascina il cubo dalla gerarchia al pannello Progetto. Noterai che il testo del cubo nella gerarchia è diventato blu. Questo perché abbiamo creato un prefabbricato e salvato nel nostro progetto. Elimina il tuo cubo dalla gerarchia ora.

Tutto ciò di cui abbiamo bisogno ora è uno script per generare i cubi. Nella gerarchia fai clic su Crea> Crea vuoto e rinominalo in Game Manager in Inspector e aggiungi uno script chiamato gameManager. Apri lo script e aggiungi questo codice:

 using UnityEngine; using System.Collections; public class gameManager : MonoBehaviour { //a variable to hold the prefab we want to spawn public GameObject cube; //we want some variables to decide how any cubes to spawn //and how high above us we want them to spawn public int numberToSpwan; public float lowestSpawnheight; public float highestSpawnheight; // Use this for initialization void Start () { for (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 () { } } 

Salva lo script. Tornati nell'editor, selezionate il Game Manager nella gerarchia e trascinate il prefabbricato del cubo dal pannello del progetto alla variabile Cube nell'Inspector. Compila anche qui i valori per la tua deposizione delle uova. Puoi giocherellare con esso per renderlo duro o facile come ti piace. Nota che vale la pena di generare i cubi più bassi abbastanza in alto da permettere all'inizializzazione di Uniduino - perdere la partita prima che tu possa muoverti può essere frustrante!

Game Manager

Il progetto finito

Ora quando premi play, i cubi si apriranno sopra di te e cadranno. Puoi usare il potenziometro per evitarli e il tuo pulsante per rallentare il tempo.

In questo progetto abbiamo creato un controller personalizzato con un Arduino, configurato Unity e Uniduino per comunicare con esso, e creato un semplice gioco per testarlo. I concetti qui possono essere applicati a quasi tutti i progetti, e ci sono persino jam di gioco specializzati in controller personalizzati.

Con Arduino e Unity è possibile creare un controller personalizzato da quasi tutto. Hai creato un hi-fi che controlla un veicolo spaziale? Un tostapane che controlla un gioco platform?

Se hai realizzato un progetto come questo mi piacerebbe vederlo! Pubblicalo nei commenti qui sotto!

In this article