Sommario:

Controller di gioco Arduino con luci che rispondono al tuo gioco Unity:: 24 passaggi
Controller di gioco Arduino con luci che rispondono al tuo gioco Unity:: 24 passaggi

Video: Controller di gioco Arduino con luci che rispondono al tuo gioco Unity:: 24 passaggi

Video: Controller di gioco Arduino con luci che rispondono al tuo gioco Unity:: 24 passaggi
Video: Quando provi a fare un complimento a una ragazza... 2024, Novembre
Anonim
Controller di gioco Arduino con luci che rispondono al tuo gioco Unity
Controller di gioco Arduino con luci che rispondono al tuo gioco Unity

Prima di tutto ho scritto questa cosa a parole. Questa è la prima volta che uso istruibile, quindi ogni volta che dico: scrivi il codice in questo modo sappi che mi riferisco all'immagine nella parte superiore di quel passaggio.

In questo progetto utilizzo 2 arduino per eseguire 2 bit di codice separati poiché ho avuto qualche problema a farlo funzionare con uno solo

Questi sono l'Uno e il Leonardo

in totale questo è ciò di cui avrai bisogno per realizzare il breadboard di questo progetto.

· 7 pulsanti

· 23 ponticelli

· 1 arduino Leonardo + cavo usb

· 4 resistori· 4 led

· 1 arduino uno + cavo usb

· 2 breadboard

Passaggio 1: collegare i pulsanti di controllo ad Arduino

Collegamento dei pulsanti di controllo ad Arduino
Collegamento dei pulsanti di controllo ad Arduino

Di cosa avrai bisogno per collegare questa parte:

· 7 pulsanti

· 14 ponticelli

· 1 arduino Leonardo + cavo usb

· tagliere

I pulsanti sono piuttosto semplici da collegare, ma possono diventare rapidamente un disastro da visualizzare sotto forma di immagine.

· per prima cosa posizionate i pulsanti nelle posizioni che ho indicato nell'immagine sopra.

· In secondo luogo si desidera collegare un ponticello dalla fessura di terra sull'arduino Leonardo nella riga meno della breadboard.

· Ora si collegano i ponticelli da qualsiasi punto della riga meno alla riga che è in linea con il perno destro del pulsante. questo gli alimenterà il potere.

· Successivamente si desidera collegare un ponticello da una riga in linea con il pin sinistro del pulsante agli slot di ingresso digitale di Leonardo. Per i pulsanti qui ho usato gli slot 2 - 3 – 4 – 5 - 6 - 7- 8

Ho mostrato solo il filo che va all'ingresso 8 sull'immagine perché diventa un'immagine molto disordinata per mostrarti tutti i fili che si incrociano l'un l'altro.

Passaggio 2: codifica di Arduino Leonardo:

Codificare Arduino Leonardo
Codificare Arduino Leonardo

Quindi, per dirti il motivo per cui sto usando Leonardo per questo. È perché ha un certo chip che l'Uno non ha che fa sì che il computer lo riconosca come un dispositivo di input USB. Proprio come farebbe una tastiera. Il che ci permette di fare qualcosa che rende la nostra vita come programmatori per questo progetto molto più facile. Emulazione della tastiera. Inganneremo il computer facendogli credere che stiamo premendo determinati tasti sulla tastiera quando in realtà stiamo premendo i pulsanti sul nostro controller.

Ora ti guiderò passo dopo passo nel codice.

Prima di tutto in alto includiamo Keyboard.h. Questo ci consentirà di utilizzare le funzioni della tastiera che utilizzeremo nel nostro codice.

Passaggio 3:

Immagine
Immagine

Quindi dobbiamo definire gli slot di ingresso digitale che utilizzeremo sul

Leonardo per ogni bottone.

Ho anche chiamato ognuno di loro come la chiave che ho intenzione di emulare.

Passaggio 4:

Immagine
Immagine

Da lì entriamo nella funzione di configurazione. Questo dice a

arduino cosa fa all'avvio.

prima scriviamo il Serial.begin che aprirà la porta seriale e imposterà il data rate a 9600 bps

e definiamo tutti i pin denominati come input.

Passaggio 5:

Immagine
Immagine

E infine scriviamo la nostra funzione loop che controllerà se

i pulsanti vengono premuti e dicono all'arduino come rispondere a questo.

Per prima cosa scriviamo Keyboard.begin che dirà ad arduino che deve prendersi cura di noi usando le funzioni della tastiera

Passaggio 6:

Immagine
Immagine
Immagine
Immagine
Immagine
Immagine

Quindi per ogni pulsante scriviamo un'istruzione if/else che funziona così

Quindi quello che ho detto ad arduino qui è: se il mio pulsante sinistro viene premuto sul controller, fai credere al computer che stiamo premendo il tasto "a" e se non è così fagli pensare che abbiamo lasciato andare il tasto.

In pratica ripeti questo blocco di codice per ogni pulsante del controller. con le modifiche per ogni variabile e le chiavi che la variabile deve emulare

Passaggio 7:

Immagine
Immagine

I tasti che abbiamo detto al computer di premere qui sono W – A – S – D che

sono praticamente lo standard per il movimento nei giochi per PC e E - Q - e la barra spaziatrice che in questo codice è riconosciuta come " " che sono i pulsanti che uso per raccogliere - chiudere e sparare nel mio gioco. Sentiti libero di cambiarli con i tasti che ritieni migliori per il tuo gioco/controller.

Quindi, infine, diciamo all'arduino di interrompere il controllo su quale Keyboard.end

Passaggio 8: codifica del movimento in unità:

Movimento di codifica in unità
Movimento di codifica in unità

Prima di tutto lascia che ti dica che lo sto facendo per un gioco 2D, quindi

gli esempi che vedrai sono costruiti per questo. Principalmente nel senso che uso vector2 se stai lavorando in 3d userai vector3. perché dovresti preoccuparti di una dimensione extra del movimento in 3d.

Ora il motivo per cui ho usato l'emulazione della tastiera sul lato arduino è perché Unity ha qualcosa integrato per riconoscere i tasti sulla tastiera che possiamo usare.

Se apri il tuo progetto in unity vai su Modifica -> Impostazioni progetto -> Input. Puoi vedere nel tuo ispettore che avvia il gestore di input. Dove se fai clic su Assi puoi vedere un sacco di nomi di input che vengono normalmente utilizzati per i controller del PC come quelli che stiamo creando ora. I 2 ingressi che utilizzeremo sono Orizzontale e Verticale che controlla che hai indovinato W-A-S-D.

Per prima cosa vuoi creare un oggetto nella gerarchia delle scene di unità che sarà il tuo giocatore. Nel mio caso sono questo simpatico ragazzino. Questo può essere qualunque cosa tu abbia bisogno che sia, ma per lo scopo del mio gioco ho creato questo ragazzo.

Passaggio 9:

Immagine
Immagine

Vuoi dare a questo giocatore 2 cose. Un collisore di scatole 2d e

a Rigidbody 2d e modificali in modo che siano come l'immagine sopra.

Passaggio 10:

Immagine
Immagine

Quindi vuoi andare nella cartella dei tuoi progetti e creare un

Script C#. Che ho chiamato PlayerMovement.

In questo script andrai a definire 2 variabili. Un float pubblico che chiamo moveSpeed. Che determinerà la velocità con cui andrai. E un Rigidbody2D privato che chiamo RigidPlayer. Che cercherà i tuoi giocatori rigidbody.

Non dimenticare di accedere al tuo editor di unità, fai clic sul tuo lettore, aggiungi questo nuovo script trascinandolo nell'ispettore e imposta un valore numerico per moveSpeed.

Passaggio 11:

Immagine
Immagine

ora nel tuo Start() vuoi fare una cosa e cioè

assicurati che il tuo RigidPlayer possa trovare il tuo pagatore rigidbody 2d. Lo fai con la seguente riga di codice:

Passaggio 12:

Immagine
Immagine

Quindi passiamo all'aggiornamento(). Ecco dove stiamo andando

per far muovere il giocatore.

lo facciamo con un'istruzione if piuttosto semplice che esaminerà i tasti negativo e positivo dall'orizzontale (AD) e dal verticale (SW) e lo applicherà come numero per forzare che metteremo sul nostro corpo rigido 2d per spingere il nostro giocatore dentro una direzione. Quel numero verrà moltiplicato per la variabile moveSpeed.

Passaggio 13:

Immagine
Immagine

Infine, vuoi assicurarti che il tuo giocatore smetta di muoversi quando

non premi niente. Questo ti piace così:

Ora, se vuoi usare gli altri 3 pulsanti per qualsiasi cosa, fallo con questa istruzione if: if(Input. GetKeyDown(Keycode. Space))

per la barra spaziatrice e al posto dello spazio metti la lettera degli altri tasti che hai scelto di usare per gli altri tasti.

Passaggio 14: collegare le luci ad Arduino

Collegare le luci ad Arduino
Collegare le luci ad Arduino

·

Di cosa avrai bisogno per collegare questa parte:

· 9 ponticelli

· 4 resistori

· 4 led

· 1 arduino uno + cavo usb

· tagliere

Il collegamento per le luci sarà effettuato tramite l'Uno.

Finirà per assomigliare a questa immagine sopra:

Colleghi i resistori al lato lungo dei LED. E poi colleghi un ponticello da un numero di pin digitale sull'uno alle resistenze. in questo caso ho usato gli slot dei pin digitali 9 – 10 -11 -12 questi numeri saranno rilevanti quando arriveremo al codice per le luci.

Da lì vuoi collegare un ponticello dallo slot di terra sul tuo arduino Uno al punto sulla tua scheda come mostrato con il filo nero nell'immagine sopra.

Quindi vuoi avere 4 ponticelli tutti collegati all'estremità corta di ciascun LED

Passaggio 15: codifica di Arduino Uno

Codificare Arduino Uno
Codificare Arduino Uno

Bene, prima di tutto andremo a definire di nuovo le nostre variabili

Quindi, prima quali ingressi digitali stiamo usando per le nostre luci. E faremo un char chiamato myCol[20]

Passaggio 16:

Immagine
Immagine

Quindi nel setup vogliamo fare di nuovo Serial.begin. Metti tutti i nostri LED su Output e spegnili tutti all'avvio.

Passaggio 17:

Immagine
Immagine

E infine vuoi scrivere la tua funzione loop.

Ciò farà sì che Arduino legga tutti i dati che arrivano tramite seriale fino a quando non si verifica uno dei due eventi. Viene rilevato un carattere di avanzamento riga; questo è identificato da lf che è impostato a 10 ed è il primo argomento o una certa quantità di byte è stata letta. Questo è il terzo argomento e per questo esempio è impostato su un solo byte. I dati sono memorizzati nella variabile myCol, che è impostata su char e un limite di 20. In readBytesUntil questo è il secondo argomento. O un altro modo per spiegarlo è Serial.readBytesUntil(terminatorCharacter, buffer, byteLimit);

E le istruzioni if assicureranno che alcune luci si accendano quando l'unità dà il segnale. In questo caso ho ottenuto 4 luci di colore diverso, quindi faccio in modo che unity invii g per l'accensione del LED verde, b per l'accensione del LED blu, r per l'accensione del LED rosso e y per l'accensione del LED giallo.

Passaggio 18: luci di codifica Lato unità:

Codifica luci lato unità
Codifica luci lato unità

Ok 2 cose prima di entrare in questo.

1. nel tuo programma di codifica arduino vai su Strumento -> Porta -> e controlla per me quale COM è acceso il tuo uno. Nel mio caso è COM3 (questo sarà importante nel codice)

2.in unity Vai a Modifica -> Impostazioni progetto -> Giocatore quindi nell'ispettore fai clic su altre impostazioni vai a Livello di compatibilità API e passa dalla sottorete. NET 2.0 a solo. NET 2.0

Ok è fatto. Entriamo in esso.

Fare clic con il tasto destro sulla gerarchia e fare clic su Crea vuoto.

Questo sarà un oggetto di gioco vuoto che esisterà solo nel tuo gioco per contenere uno script per noi. Ho chiamato questo oggetto Init.

Passaggio 19:

Immagine
Immagine

Quindi vai nella scheda dei tuoi progetti e crea un nuovo script C#

e chiamalo Invio.

La prima cosa che fai è scrivere queste righe nelle sezioni using del tuo codice:

utilizzando System. IO. Ports;

usando System. Threading;

questo fa sì che possiamo usare la variabile SerialPort

Passaggio 20:

Immagine
Immagine

in questo script creeremo le seguenti variabili. Ora nota che ho ricevuto COM3 lì, questo potrebbe essere diverso per te come abbiamo discusso all'inizio di questo passaggio. Se è, sostituisci il 3 con il numero che ha detto per te.

Passo 21:

Immagine
Immagine

All'inizio diciamo che lo script da usare è OpenConnection

funzione che scriveremo tra un po'

l'aggiornamento è più un test che qualsiasi cosa, ma se vuoi includerlo è per testare i messaggi inviati a unity. Potresti ignorarlo onestamente.

Passaggio 22:

Immagine
Immagine

Ok ora per questa funzione OpenConnection. Questo è solo un grande

if/else che mantiene la connessione aperta, copiala come scritto e dovresti stare bene.

Passaggio 23:

Immagine
Immagine

Ora ricorda dal codice arduino che l'ho fatto controllare

segnali che l'unità gli invierà.

bene questo è dove succede. Nel mio caso ho collegato 4 luci quindi ho scritto 4 funzioni estremamente semplici. Tutto ciò che fanno è che quando vengono chiamati inviano una lettera ad arduino. Quando arduino ottiene quella lettera si accende la luce corrispondente a detta lettera.

Passaggio 24:

Immagine
Immagine

Ti starai chiedendo come faccio a chiamarlo

funzione? Bene, lo fai con una semplice riga in uno qualsiasi degli altri script c# che usi per il tuo gioco. Invio. NomeFunzionequi();. Quindi, ad esempio, nel mio gioco il giocatore ha il compito di raccogliere 4 sfere colorate. Quindi ho scritto un piccolo script che si assicura che quando si avvicina a uno e preme il pulsante destro lo raccoglie e invia il segnale all'arduino che in questo caso la sfera gialla è stata raccolta. In modo che lo sappia, ok devo accendere il LED giallo:

Puoi mettere questa riga di codice ovunque tu voglia. Se vuoi che si accenda all'avvio del gioco, mettilo nella funzione di avvio. Vuoi che si accenda quando muore mettilo nella tua funzione per la morte dei giocatori. Sperimenta un po' in giro. Ho scelto di rendere le luci una sorta di elemento dell'interfaccia utente al di fuori del gioco per tenere traccia delle sfere che devi raccogliere senza ingombrare lo schermo.

Consigliato: