Taula de continguts:

Controlador de jocs Arduino amb llums que responen al vostre joc Unity :: 24 passos
Controlador de jocs Arduino amb llums que responen al vostre joc Unity :: 24 passos

Vídeo: Controlador de jocs Arduino amb llums que responen al vostre joc Unity :: 24 passos

Vídeo: Controlador de jocs Arduino amb llums que responen al vostre joc Unity :: 24 passos
Vídeo: REAL RACING 3 LEAD FOOT EDITION 2024, Desembre
Anonim
Controlador de jocs Arduino amb llums que responen al vostre joc Unity
Controlador de jocs Arduino amb llums que responen al vostre joc Unity

En primer lloc, vaig escriure això amb paraules. Aquesta és la primera vegada que faig servir instruccions, així que sempre que dic: escriviu codi així, sé que em refereixo a la imatge de la part superior d'aquest pas.

En aquest projecte faig servir 2 arduino’s per executar 2 bits de codi separats, ja que he tingut alguns problemes perquè funcionés només amb un

Aquests són l’Uno i el Leonardo

en total, això és el que necessiteu per analitzar aquest projecte.

· 7 polsadors

· 23 cables de pont

· 1 cable arduino Leonardo + usb

· 4 resistències · 4 led’s

· 1 arduino uno + cable USB

· 2 taules de suport

Pas 1: connectar els botons de control a Arduino

Connectant els botons de control a Arduino
Connectant els botons de control a Arduino

Què necessiteu per connectar aquesta part:

· 7 polsadors

· 14 cables de pont

· 1 cable arduino Leonardo + usb

· Taula de pa

Els botons són bastant senzills de connectar, però poden convertir-se ràpidament en un embolic per mostrar en forma d’imatge.

· Primer col·loqueu els botons a les posicions que he marcat a la imatge superior.

· En segon lloc, voleu connectar un pont des de la ranura de terra de l'arduino Leonardo a la fila menys de la taula de treball.

· Ara connecteu els ponts des de qualsevol lloc de la fila menys fins a la fila que està en línia amb el passador dret del polsador. això li alimentarà energia.

· A continuació, voleu connectar un cable de pont d’una fila que coincideix amb el passador esquerre del polsador a les ranures d’entrada digital de Leonardo. Per als botons d’aquí he utilitzat la ranura 2 - 3 - 4 - 5 - 6 - 7-8

Només he mostrat el cable que va a l'entrada 8 a la imatge perquè es converteix en una imatge molt desordenada per mostrar-vos tots els cables que es creuen.

Pas 2: Codificació de l'Arduino Leonardo:

Codificació de l'Arduino Leonardo
Codificació de l'Arduino Leonardo

Així que per explicar-vos el motiu pel qual estic fent servir Leonardo per això. És perquè té un xip que l’On no té, cosa que fa que l’ordinador el reconegui com a dispositiu d’entrada USB. Molt semblant a un teclat. La qual cosa ens permet fer alguna cosa que faci que les nostres vides com a programadors d’aquest projecte siguin molt més fàcils. Emulació del teclat. Enganyarem l’equip perquè pensi que estem pressionant certes tecles del teclat quan de fet estem pressionant els botons del controlador.

Ara us aniré caminant pensant que el codi pas a pas.

Primer de tot, a la part superior, incloem Keyboard.h. Això ens permetrà utilitzar les funcions de teclat que farem servir al nostre codi.

Pas 3:

Imatge
Imatge

A continuació, hem de definir les ranures d'entrada digital que farem servir al

Leonardo per a cada botó.

També he anomenat cadascun d’ells amb la clau que emularé.

Pas 4:

Imatge
Imatge

A partir d’aquí entrem en la funció de configuració. Això explica el

arduino què fa en arrencar.

primer escrivim el Serial.begin que obrirà el port sèrie i establirà la velocitat de dades a 9600 bps

i definim que tots es denominen pins per ser entrades.

Pas 5:

Imatge
Imatge

I finalment escrivim la nostra funció de bucle que comprovarà si

s'estan pressionant els botons i indiquen a l'arduino com respondre a això.

Primer escrivim Keyboard.begin que li dirà a arduino que ha de mirar-nos amb les funcions del teclat

Pas 6:

Imatge
Imatge
Imatge
Imatge
Imatge
Imatge

Després, per a cada botó escrivim una sentència if / else que sigui així

Així que el que he dit a arduino aquí és: si s’està pressionant el botó esquerre del controlador, feu que l’ordinador pensi que estem pressionant la tecla “a” i, si no és així, feu-li pensar que hem deixat anar la tecla.

Bàsicament repetiu aquest bloc de codi per a cada botó del controlador. amb canvis per a cada variable i les claus que aquesta variable ha d’emular

Pas 7:

Imatge
Imatge

Les tecles que vam dir a l'ordinador que premia aquí són W - A - S - D que

són gairebé l’estàndard per al moviment en jocs de PC i E - Q - i la barra espaiadora que en aquest codi es reconeix com a ‘’ quins són els botons que faig servir per desfer-me i disparar al meu joc. No dubteu a canviar-los per les claus que considereu que funcionen millor per al vostre joc / controlador.

A continuació, per últim, li diem a l’arduino que aturi la comprovació de quin Keyboard.end

Pas 8: codificació del moviment en unitat:

Moviment de codificació en unitat
Moviment de codificació en unitat

En primer lloc, permeteu-me que us digui que estic fent això per a un joc en 2d

els exemples que veureu estan construïts per a això. Principalment, és a dir, on faig servir vector2’s si esteu treballant en 3D, feu servir vector3’s. perquè us hauríeu de preocupar per una dimensió addicional del moviment en 3d.

Ara el motiu pel qual he utilitzat l’emulació del teclat al costat de l’arduino és perquè Unity té alguna cosa integrada per reconèixer les tecles del teclat que podem utilitzar.

Si obriu el projecte en unitat, aneu a Edita -> Configuració del projecte -> Entrada. Podeu veure al vostre inspector que arrenca el gestor d'entrada. Si feu clic a Eixos, podeu veure un munt de noms d’entrada que s’utilitzen normalment per als controladors de PC com els que estem fent ara. Les 2 entrades que farem servir són horitzontals i verticals que comproven que ho heu endevinat W-A-S-D.

Primer voleu crear un objecte a la jerarquia de les vostres escenes d’unitat que serà el vostre jugador. En el meu cas ser aquest divertit noi. Això pot ser el que necessiteu, però per al propòsit del meu joc he creat aquest noi.

Pas 9:

Imatge
Imatge

Voleu donar a aquest jugador 2 coses. Un box collider 2d i

un Rigidbody 2d i editeu-los perquè siguin com la imatge superior.

Pas 10:

Imatge
Imatge

Després voleu entrar a la carpeta de projectes i crear un fitxer

Script C #. Al que vaig anomenar PlayerMovement.

En aquest script definireu 2 variables. Un flotador públic que anomeno moveSpeed. El que determinarà la rapidesa amb què aneu. I un Rigidbody2D privat que anomeno RigidPlayer. Que buscarà als teus jugadors rigidbody.

No us oblideu d’arribar al vostre editor d’unitat, feu clic al reproductor per afegir aquest nou script arrossegant-lo a l’inspector i establir un valor numèric per moveSpeed.

Pas 11:

Imatge
Imatge

ara al vostre Inici () voleu fer una cosa i això és

assegureu-vos que el vostre RigidPlayer pugui trobar el vostre pagador rigidbody 2d. Ho feu amb la següent línia de codi:

Pas 12:

Imatge
Imatge

Després passem a l’actualització (). Aquí és cap a on anem

per fer moure el jugador.

ho fem amb una afirmació if bastant simple que analitzi les claus negatives i positives de l’horitzontal (AD) i vertical (SW) i apliqui que com a número per forçar posarem el nostre cos rígid 2d per empènyer el nostre jugador una direcció. Aquest nombre es multiplicarà per la variable moveSpeed.

Pas 13:

Imatge
Imatge

Per últim, voleu assegurar-vos que el vostre jugador deixi de moure’s quan

no premeu res. Això ho fa així:

Ara, si voleu utilitzar els vostres altres 3 botons per fer qualsevol cosa, feu això amb aquesta sentència if: if (Input. GetKeyDown (Keycode. Space))

per a la barra espaiadora i, en lloc d’espai, poseu la lletra de les altres tecles que heu escollit per a les altres tecles.

Pas 14: connectar llums a Arduino

Connectant llums a Arduino
Connectant llums a Arduino

·

Què necessiteu per connectar aquesta part:

· 9 cables de pont

· 4 resistències

· 4 led’s

· 1 arduino uno + cable USB

· Taulell de suport

La connexió dels llums es farà a través de l’Uno.

Acabarà semblant aquesta imatge superior:

Connecteu les resistències al costat llarg dels LED. A continuació, connecteu un pont d'un número de pin digital a l'uno a les resistències. en aquest cas he utilitzat ranures digitals de pin 9 - 10 -11 -12, aquests números seran rellevants quan arribem al codi dels llums.

Des d’allà voleu connectar un pont des de la ranura de terra del vostre arduino Uno fins al lloc de la vostra placa, tal com es veu amb el fil negre de la imatge superior.

A continuació, voleu que hi hagi 4 ponts que condueixin a l'extrem curt de cada LED

Pas 15: Codificació de l'Arduino Uno

Codificació de l'Arduino Uno
Codificació de l'Arduino Uno

Molt bé, primer definirem de nou les nostres variables

Per tant, primer quines entrades digitals estem utilitzant per a les nostres llums. I farem un personatge anomenat myCol [20]

Pas 16:

Imatge
Imatge

A continuació, a la configuració volem tornar a fer el Serial.begin. Poseu tots els LEDs a la sortida i apagueu-los tots a l’inici.

Pas 17:

Imatge
Imatge

I, finalment, voleu escriure la funció de bucle.

Això farà que l'Arduino llegeixi totes les dades que entrin per sèrie fins que es produeixi un dels dos esdeveniments. Es detecta un caràcter d'alimentació de línia; això s'identifica amb lf que s'estableix en 10 i és el primer argument o s'ha llegit una quantitat determinada de bytes. Aquest és el tercer argument i, per a aquest exemple, es defineix en només un byte. Les dades s’emmagatzemen a la variable myCol, que s’estableix en char i té un límit de 20. A readBytesUntil aquest és el segon argument. O una altra manera d’explicar-ho és Serial.readBytesUntil (terminatorCharacter, buffer, byteLimit);

I les afirmacions if asseguraran que certs llums s’encenguin quan la unitat dóna el senyal. En aquest cas, tinc 4 llums de colors diferents per fer que la unitat enviï g perquè s'encengui el LED verd, b que s'encengui el blau, r que s'encengui el vermell i y que s'encengui el LED groc.

Pas 18: Codificació de llums Unity Side:

Llums de codificació Unity Side
Llums de codificació Unity Side

Oke 2 coses abans d’entrar en això.

1. al vostre programa de codificació arduino, aneu a Eina -> Port -> i comproveu per a mi quin és el vostre COM. En el meu cas és COM3 (això serà important al codi)

2. en unitat, aneu a Edita -> Configuració del projecte -> Reproductor i, a continuació, a l’inspector, feu clic a altres paràmetres, aneu a Nivell de compatibilitat Api i canvieu-lo de la subxarxa. NET 2.0 a. NET 2.0.

Oke, això està fet. Entrem-hi.

Feu clic amb el botó dret a la vostra jerarquia i feu clic a Crea buit.

Aquest serà un objecte de joc buit que només existirà al vostre joc per contenir un script per a nosaltres. He anomenat aquest objecte Init.

Pas 19:

Imatge
Imatge

A continuació, aneu a la pestanya Projectes i creeu un script C # nou

i anomenar-lo Sending.

El primer que heu de fer és escriure aquestes línies a les seccions que utilitzen el vostre codi:

utilitzant System. IO. Ports;

utilitzant System. Threading;

això fa que puguem utilitzar la variable SerialPort

Pas 20:

Imatge
Imatge

en aquest script farem les següents variables. Ara, tingueu en compte que tinc COM3 allà, que pot ser diferent per a vosaltres, tal com hem comentat al principi d’aquest pas. Si és, substituïu el 3 pel número que va dir per a vosaltres.

Pas 21:

Imatge
Imatge

Al principi, li diem que l'script que s'ha d'utilitzar és OpenConnection

funció que escriurem una mica

l'actualització és més una prova que qualsevol altra cosa, però si voleu incloure-la per provar els missatges que s'envien a unitat. Es podria ignorar honestament.

Pas 22:

Imatge
Imatge

Oke ara per aquesta funció OpenConnection. Això és només un gran

Declaració if / else que manté la connexió oberta, només cal copiar-la com està escrita i hauria d'estar bé.

Pas 23:

Imatge
Imatge

Ara recordeu el codi arduino que he fet comprovar

senyals que la unitat li enviarà.

bé aquí és on passa això. En el meu cas, em van connectar 4 llums, de manera que vaig escriure 4 funcions extremadament senzilles. Tot el que fan és quan els criden, envien una carta a arduino. Quan l'arduino aconsegueix aquesta lletra, il·lumina la llum corresponent a aquesta lletra.

Pas 24:

Imatge
Imatge

És possible que us pregunteu com puc fer-ho per trucar-ho

funció? Doncs ho feu amb una línia senzilla en qualsevol dels altres scripts de c # que utilitzeu per al vostre joc. Sending. NameFunctionhere ();. Així, per exemple, en el meu joc, el jugador té la tasca de recollir 4 esferes de colors. Així que vaig escriure un petit script que assegura que quan s’acosta a un i prem el botó dret l’agafa i envia el senyal a l’arduino que en aquest cas s’ha recollit l’orbe groc. Perquè ho sàpiga, he d’encendre el LED groc:

Podeu posar aquesta línia de codi a qualsevol lloc que vulgueu. Si voleu que s'encengui quan comença el joc, poseu-lo a la funció d'inici. Voleu que s'encengui quan mor, poseu-lo en la vostra funció per a la mort dels jugadors. Experimenteu una mica. Decideixo fer de les llums una mena d’element d’interfície d’usuari fora del joc per fer un seguiment de les esferes que heu de recollir sense desordenar la pantalla.

Recomanat: