Inhoudsopgave:

Arduino-gamecontroller met verlichting die reageert op uw Unity-spel:: 24 stappen
Arduino-gamecontroller met verlichting die reageert op uw Unity-spel:: 24 stappen

Video: Arduino-gamecontroller met verlichting die reageert op uw Unity-spel:: 24 stappen

Video: Arduino-gamecontroller met verlichting die reageert op uw Unity-spel:: 24 stappen
Video: De ideale gaming set-up - Xbox 2024, December
Anonim
Arduino-gamecontroller met verlichting die reageert op uw Unity-spel
Arduino-gamecontroller met verlichting die reageert op uw Unity-spel

Eerst schreef ik dit ding uit in woord. Dit is de eerste keer dat ik instructable gebruik, dus telkens wanneer ik zeg: schrijf code uit zoals dus weet dat ik verwijs naar de afbeelding bovenaan die stap.

In dit project gebruik ik 2 arduino's om 2 afzonderlijke stukjes code uit te voeren, omdat ik wat problemen had om het met slechts één te laten werken

Dit zijn de Uno en de Leonardo

in totaal is dit wat je nodig hebt om dit project te breadboarden.

· 7 drukknoppen

· 23 jumperdraden

· 1 arduino Leonardo + usb-kabel

· 4 weerstanden · 4 led’s

· 1 arduino uno + usb-kabel

· 2 broodplanken

Stap 1: De bedieningsknoppen aansluiten op Arduino

De bedieningsknoppen aansluiten op Arduino
De bedieningsknoppen aansluiten op Arduino

Wat je nodig hebt om dit onderdeel aan te sluiten:

· 7 drukknoppen

· 14 jumperdraden

· 1 arduino Leonardo + usb-kabel

· breadboard

De knoppen zijn vrij eenvoudig aan te sluiten, maar kunnen snel een puinhoop worden om in afbeeldingsvorm weer te geven.

· eerst plaats je de drukknoppen in de posities die ik op de afbeelding hierboven heb gemarkeerd.

· Ten tweede wil je een jumper aansluiten van de grondgleuf op de Arduino Leonardo in de min-rij van het breadboard.

· Nu haak je jumpers van overal op de min-rij aan op de rij die in lijn is met de rechter pin van je drukknop. dit zal er kracht aan geven.

· Vervolgens wil je een jumperdraad aansluiten van een rij die in lijn is met de linkerpin van je drukknop naar de digitale ingangssleuven van de Leonardo. Voor de knoppen hier gebruikte ik slot 2 - 3 – 4 – 5 - 6 - 7- 8

Ik heb alleen laten zien dat de draad naar ingang 8 op de afbeelding gaat, omdat het een erg rommelig beeld wordt om je alle draden te laten zien die elkaar kruisen.

Stap 2: Coderen van de Arduino Leonardo:

De Arduino Leonardo coderen
De Arduino Leonardo coderen

Dus om je te vertellen waarom ik Leonardo hiervoor gebruik. Het is omdat het een bepaalde chip heeft die de Uno niet heeft, waardoor de computer het herkent als een USB-invoerapparaat. Net zoals het een toetsenbord zou zijn. Wat ons in staat stelt iets te doen dat ons leven als programmeurs voor dit project een stuk makkelijker maakt. Toetsenbord emulatie. We gaan de computer voor de gek houden door te denken dat we bepaalde toetsen op het toetsenbord indrukken, terwijl we in feite op knoppen op onze controller drukken.

Nu ga ik je stap voor stap door de code laten lopen.

Allereerst helemaal bovenaan nemen we Keyboard.h op. Hierdoor kunnen we de toetsenbordfuncties gebruiken die we in onze code gaan gebruiken.

Stap 3:

Afbeelding
Afbeelding

Vervolgens moeten we de digitale ingangsslots definiëren die we gaan gebruiken op de

Leonardo voor elke knop.

Ik heb ze ook allemaal genoemd naar de sleutel die ik ga emuleren.

Stap 4:

Afbeelding
Afbeelding

Van daaruit komen we in de setup-functie. Dit vertelt de

arduino wat het doet bij het opstarten.

eerst schrijven we de Serial.begin die de seriële poort opent en de datasnelheid instelt op 9600 bps

en we definiëren dat alle pinnen worden genoemd als invoer.

Stap 5:

Afbeelding
Afbeelding

En tot slot schrijven we onze lusfunctie die zal controleren of

knoppen worden ingedrukt en vertel de arduino hoe hij daarop moet reageren.

Eerst schrijven we Keyboard.begin, wat arduino zal vertellen dat hij op ons moet letten met behulp van toetsenbordfuncties

Stap 6:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens schrijven we voor elke knop een if/else-statement dat als volgt gaat:

Dus wat ik Arduino hier heb verteld, is: als mijn linkerknop op de controller wordt ingedrukt, laat de computer dan denken dat we op de "a" -toets drukken en als dat niet het geval is, laat hem dan denken dat we de toets hebben losgelaten.

In principe herhaal je dit codeblok voor elke knop op je controller. met wijzigingen voor elke variabele en de sleutels die de variabele moet emuleren

Stap 7:

Afbeelding
Afbeelding

De toetsen die we de computer hebben verteld om hier te raken, zijn W - A - S - D, wat:

zijn zo'n beetje de standaard voor beweging in pc-games en E - Q - en de spatiebalk die in deze code wordt herkend als ' ', wat de knoppen zijn die ik gebruik om op te halen - te negeren en te vuren in mijn spel. Voel je vrij om deze te veranderen in de toetsen waarvan je denkt dat ze beter werken voor je game/controller.

Ten slotte vertellen we de arduino om te stoppen met controleren welke Keyboard.end

Stap 8: Beweging coderen in eenheid:

Beweging in eenheid coderen
Beweging in eenheid coderen

Laat me je eerst vertellen dat ik dit voor een 2D-spel maak, dus

de voorbeelden die je gaat zien zijn daar voor gemaakt. Betekent vooral waar ik vector2's gebruik als je in 3d werkt, je vector3's zult gebruiken. omdat je je zorgen zou moeten maken over een extra dimensie van beweging in 3D.

De reden dat ik toetsenbordemulatie aan de arduino-kant heb gebruikt, is omdat Unity iets ingebouwd heeft om toetsen op het toetsenbord te herkennen die we kunnen gebruiken.

Als u uw project in één geheel opent, gaat u naar Bewerken -> Projectinstellingen -> Invoer. Je kunt in je inspecteur zien dat het de invoermanager opstart. Als je op Axes klikt, zie je een hele reeks invoernamen openen die normaal worden gebruikt voor pc-controllers zoals degene die we nu maken. De 2 ingangen die we gaan gebruiken zijn Horizontaal en Verticaal, wat controleren of je het al geraden hebt W-A-S-D.

Eerst wil je een object maken in de hiërarchie van je eenheidsscènes die je speler zal zijn. In mijn geval dit leuke ventje. Dit kan zijn wat je maar wilt, maar voor het doel van mijn spel heb ik deze man gemaakt.

Stap 9:

Afbeelding
Afbeelding

Je wilt deze speler 2 dingen geven. Een box-collider 2d en

een Rigidbody 2d en bewerk ze zodat ze zijn zoals de afbeelding hierboven.

Stap 10:

Afbeelding
Afbeelding

Dan wil je naar je projectenmap gaan en een

C#-script. Die ik PlayerMovement noemde.

In dit script ga je 2 variabelen definiëren. Een openbare praalwagen die ik moveSpeed noem. Die bepalen hoe snel je gaat. En een privé Rigidbody2D die ik RigidPlayer noem. Die zal kijken voor uw spelers rigidbody.

Vergeet niet om naar je unity-editor te gaan, klik op je speler om dit nieuwe script toe te voegen door het naar de inspecteur te slepen en een getalswaarde in te stellen voor moveSpeed.

Stap 11:

Afbeelding
Afbeelding

nu wil je in je Start() één ding doen en dat is

zorg ervoor dat uw RigidPlayer uw betaler rigidbody 2d kan vinden. Dat doe je met de volgende regel code:

Stap 12:

Afbeelding
Afbeelding

Dan gaan we verder met de update(). Hier gaan we heen

om de speler te laten bewegen.

we doen dat met een vrij eenvoudige if-verklaring die kijkt naar de negatieve en positieve sleutels van de horizontale (AD) en verticale (SW) en dat toepassen als een getal om te forceren, we gaan op onze rigidbody 2d zetten om onze speler naar binnen te duwen een richting. Dat aantal wordt vermenigvuldigd met de variabele moveSpeed.

Stap 13:

Afbeelding
Afbeelding

Ten slotte wilt u er zeker van zijn dat uw speler stopt met bewegen wanneer:

je drukt nergens op. Dit vind je zo leuk:

Als je nu je 3 andere knoppen voor iets wilt gebruiken, doe dat dan met dit if-statement: if(Input. GetKeyDown(Keycode. Space))

voor de spatiebalk en plaats in plaats van spatie de letter van de andere toetsen die u voor de andere toetsen hebt gekozen.

Stap 14: Verlichting aansluiten op Arduino

Verlichting aansluiten op Arduino
Verlichting aansluiten op Arduino

·

Wat je nodig hebt om dit onderdeel aan te sluiten:

· 9 jumperdraden

· 4 weerstanden

· 4 led's

· 1 arduino uno + usb-kabel

· breadboard

De aansluiting voor de verlichting gebeurt via de Uno.

Het zal er uiteindelijk uitzien als deze afbeelding hierboven:

Je sluit de weerstanden aan op de lange zijde van de LED's. En dan sluit je een jumper van een digitaal pinnummer op de uno aan op de weerstanden. in dit geval heb ik digitale pinsleuven 9 – 10 -11 -12 gebruikt. Deze nummers zullen relevant zijn als we bij de code voor de lichten komen.

Vanaf daar wil je een jumper aansluiten van de grondsleuf op je Arduino Uno naar de plek op je bord zoals te zien is met de zwarte draad op de afbeelding hierboven.

Dan wil je dat 4 jumpers allemaal naar het korte uiteinde van elke LED leiden

Stap 15: Coderen van de Arduino Uno

De Arduino Uno coderen
De Arduino Uno coderen

Oké, eerst gaan we onze variabelen opnieuw definiëren

Dus eerst welke digitale ingangen we gebruiken voor onze lampen. En we gaan een char maken genaamd myCol[20]

Stap 16:

Afbeelding
Afbeelding

Vervolgens willen we in de setup de Serial.begin opnieuw doen. Zet al onze LED's op Output en schakel ze allemaal uit bij het opstarten.

Stap 17:

Afbeelding
Afbeelding

En tot slot wil je je loop-functie schrijven.

Hierdoor zal de Arduino alle gegevens die via serie binnenkomen inlezen totdat een van de twee gebeurtenissen plaatsvindt. Er wordt ofwel een regelinvoerteken gedetecteerd; dit wordt geïdentificeerd door lf die is ingesteld op 10 en het eerste argument is of een bepaald aantal bytes is ingelezen. Dit is het derde argument en is voor dit voorbeeld ingesteld op slechts één byte. De gegevens worden opgeslagen in de variabele myCol, die is ingesteld op char en een limiet van 20. In readBytesTotdat dit het tweede argument is. Of een andere manier om het uit te leggen is Serial.readBytesUntil(terminatorCharacter, buffer, byteLimit);

En de if-statements zorgen ervoor dat bepaalde lampjes gaan branden als eenheid het signaal geeft. In dit geval heb ik 4 verschillende gekleurde lampjes, dus ik laat de eenheid g sturen om de groene LED aan te zetten, b om de blauwe LED aan te zetten, r om de rode LED aan te zetten en y om de gele LED aan te zetten.

Stap 18: Codering Lichten Unity Side:

Codering Lichten Unity Side
Codering Lichten Unity Side

Oke 2 dingen eerst voordat we hier op ingaan.

1. Ga in je Arduino-coderingsprogramma naar Tool -> Port -> en controleer voor mij op welke COM je uno staat. In mijn geval is het COM3 (dit zal belangrijk zijn in de code)

2.in unity Ga naar Bewerken -> Projectinstellingen -> Speler en klik in het infovenster op andere instellingen, ga naar Api-compatibiliteitsniveau en schakel het over van. NET 2.0-subnet naar alleen. NET 2.0

Oke dat is gedaan. Laten we erop ingaan.

Klik met de rechtermuisknop op uw hiërarchie en klik op Leeg maken.

Dit zal een leeg game-object zijn dat gewoon in je game zal bestaan om één script voor ons te bevatten. Ik heb dit object Init genoemd.

Stap 19:

Afbeelding
Afbeelding

Ga dan naar het tabblad Projecten en maak een nieuw C#-script aan

en noem het Verzenden.

Het eerste dat u doet, is deze naar regels schrijven in de gebruikende secties van uw code:

met behulp van System. IO. Ports;

met behulp van System. Threading;

dit zorgt ervoor dat we de SerialPort-variabele kunnen gebruiken

Stap 20:

Afbeelding
Afbeelding

in dit script gaan we de volgende variabelen maken. Houd er rekening mee dat ik COM3 heb, dit kan voor jou anders zijn, zoals we aan het begin van deze stap hebben besproken. Als dit het geval is, vervangt u de 3 door het nummer dat het voor u heeft gezegd.

Stap 21:

Afbeelding
Afbeelding

In het begin vertellen we dat het te gebruiken script OpenConnection is

functie die we zo gaan schrijven

de update is meer een test dan wat dan ook, maar als je het wilt opnemen, is het om berichten te testen die naar unity worden verzonden. Je zou het eerlijk kunnen negeren.

Stap 22:

Afbeelding
Afbeelding

Oke nu voor deze OpenConnection-functie. Dit is gewoon een grote

if / else-instructie die de verbinding open houdt, kopieer het gewoon zoals geschreven en het zou in orde moeten zijn.

Stap 23:

Afbeelding
Afbeelding

Onthoud nu van de arduino-code waar ik het op heb laten controleren

signalen die eenheid er naartoe gaat sturen.

nou dit is waar dat gebeurt. In mijn geval heb ik 4 lampen aangesloten, dus ik heb 4 functies geschreven die extreem eenvoudig zijn. Het enige wat ze doen is wanneer ze worden gebeld, ze een brief naar Arduino sturen. Wanneer Arduino die letter krijgt, licht het licht op dat overeenkomt met die letter.

Stap 24:

Afbeelding
Afbeelding

Je vraagt je misschien af hoe ik het zover krijg om dit te noemen

functie? Nou, je doet het met één simpele regel in een van je andere c#-scripts die je voor je spel gebruikt. Naamfunctie hier verzenden ();. Dus in mijn spel moet de speler bijvoorbeeld 4 gekleurde bollen verzamelen. Dus ik heb een klein script geschreven dat ervoor zorgt dat wanneer hij er dichtbij komt en op de juiste knop drukt, hij het oppakt en het signaal naar de arduino stuurt dat in dit geval de gele bol is opgepikt. Zodat het weet, oke, ik moet de gele LED aanzetten:

U kunt deze ene regel code overal plaatsen waar u maar wilt. Als je wilt dat het oplicht wanneer het spel begint, zet het dan in de startfunctie. Wil je dat het oplicht als hij sterft, zet het dan in jouw functie voor de dood van de speler. Experimenteer een beetje. Ik heb ervoor gekozen om van de lichten een soort ui-element te maken buiten het spel om bij te houden welke lichtbollen je moet verzamelen zonder het scherm vol te proppen.

Aanbevolen: