Inhaltsverzeichnis:

Arduino Game Controller mit Lichtern, die auf Ihr Unity-Spiel reagieren
Arduino Game Controller mit Lichtern, die auf Ihr Unity-Spiel reagieren

Video: Arduino Game Controller mit Lichtern, die auf Ihr Unity-Spiel reagieren

Video: Arduino Game Controller mit Lichtern, die auf Ihr Unity-Spiel reagieren
Video: Arduino als Gamecontroller | DIY Sidepanel / Joystick / Gangschaltung 2024, November
Anonim
Arduino-Gamecontroller mit Lichtern, die auf Ihr Unity-Spiel reagieren
Arduino-Gamecontroller mit Lichtern, die auf Ihr Unity-Spiel reagieren

Zuerst habe ich diese Sache in Wort geschrieben. Dies ist das erste Mal, dass ich instructable verwende, also wenn ich sage: Schreiben Sie Code wie so wissen, dass ich mich auf das Bild oben in diesem Schritt beziehe.

In diesem Projekt verwende ich 2 Arduinos, um 2 separate Code-Bits auszuführen, da ich einige Probleme hatte, es mit nur einem zum Laufen zu bringen

Das sind die Uno und die Leonardo

Insgesamt ist dies das, was Sie für dieses Projekt benötigen.

· 7 Drucktasten

· 23 Überbrückungsdrähte

· 1 Arduino Leonardo + USB-Kabel

· 4 Widerstände · 4 LEDs

· 1 Arduino Uno + USB-Kabel

· 2 Steckbretter

Schritt 1: Anschließen der Steuertasten an Arduino

Anschließen der Steuertasten an Arduino
Anschließen der Steuertasten an Arduino

Was Sie benötigen, um dieses Teil anzuschließen:

· 7 Drucktasten

· 14 Überbrückungsdrähte

· 1 Arduino Leonardo + USB-Kabel

· Steckbrett

Die Schaltflächen sind ziemlich einfach anzuschließen, können jedoch schnell zu einem Durcheinander werden, wenn sie in Bildform angezeigt werden.

· Platzieren Sie zuerst die Druckknöpfe in den Positionen, die ich oben im Bild markiert habe.

· Zweitens möchten Sie einen Jumper vom Erdungsschlitz des Arduino Leonardo in die Minusreihe des Steckbretts stecken.

· Jetzt verbinden Sie die Jumper von überall in der Minusreihe mit der Reihe, die mit dem rechten Stift Ihres Druckknopfes übereinstimmt. das wird ihm Strom zuführen.

· Als nächstes möchten Sie ein Überbrückungskabel aus einer Reihe, die mit dem linken Pin Ihres Tasters übereinstimmt, an die digitalen Eingangssteckplätze des Leonardo anschließen. Für die Tasten hier habe ich Slot 2 - 3 - 4 - 5 - 6 - 7 - 8. verwendet

Ich habe nur den Draht gezeigt, der auf dem Bild zu Eingang 8 geht, weil es ein sehr unordentliches Bild wird, um Ihnen alle Drähte zu zeigen, die sich kreuzen.

Schritt 2: Codierung des Arduino Leonardo:

Codierung des Arduino Leonardo
Codierung des Arduino Leonardo

Um Ihnen den Grund zu sagen, warum ich Leonardo dafür verwende. Da es einen bestimmten Chip hat, den der Uno nicht hat, erkennt der Computer ihn als USB-Eingabegerät. Ähnlich wie bei einer Tastatur. Was uns erlaubt, etwas zu tun, das unser Leben als Programmierer für dieses Projekt um einiges einfacher macht. Tastaturemulation. Wir werden den Computer dazu bringen, zu denken, dass wir bestimmte Tasten auf der Tastatur drücken, während wir tatsächlich Tasten auf unserem Controller drücken.

Jetzt werde ich Sie Schritt für Schritt durch den Code führen.

Ganz oben schließen wir zuerst Keyboard.h ein. Dadurch können wir die Tastaturfunktionen verwenden, die wir in unserem Code verwenden werden.

Schritt 3:

Bild
Bild

Dann müssen wir die digitalen Eingangssteckplätze definieren, die wir auf dem verwenden werden

Leonardo für jeden Knopf.

Ich habe auch jeden von ihnen nach dem Schlüssel benannt, den ich emulieren werde.

Schritt 4:

Bild
Bild

Von dort gelangen wir in die Setup-Funktion. Das sagt dem

arduino, was es beim Start macht.

Zuerst schreiben wir Serial.begin, das den seriellen Port öffnet und die Datenrate auf 9600 bps setzt

und wir definieren, dass alle Pins als Eingänge bezeichnet werden.

Schritt 5:

Bild
Bild

Und schließlich schreiben wir unsere Schleifenfunktion, die prüft, ob

Tasten werden gedrückt und sagen dem Arduino, wie er darauf reagieren soll.

Zuerst schreiben wir Keyboard.begin, das arduino mitteilt, dass er mit Tastaturfunktionen auf uns aufpassen muss

Schritt 6:

Bild
Bild
Bild
Bild
Bild
Bild

Dann schreiben wir für jede Schaltfläche eine if/else-Anweisung, die so aussieht

Also, was ich arduino hier gesagt habe, ist: Wenn meine linke Taste auf dem Controller gedrückt wird, lassen Sie den Computer denken, dass wir die Taste "a" drücken, und wenn dies nicht der Fall ist, denken Sie, dass wir die Taste losgelassen haben.

Sie wiederholen diesen Codeblock im Grunde für jede Taste auf Ihrem Controller. mit Änderungen für jede Variable und den Schlüsseln, die die Variable emulieren muss

Schritt 7:

Bild
Bild

Die Tasten, die wir dem Computer gesagt haben, sind W – A – S – D, was

sind so ziemlich der Standard für die Bewegung in PC-Spielen und E – Q – und die Leertaste, die in diesem Code als „ “erkannt wird, das sind die Tasten, die ich zum Aufnehmen verwende – verwerfen und in meinem Spiel feuern. Fühlen Sie sich frei, diese in die Tasten zu ändern, die Ihrer Meinung nach für Ihr Spiel / Ihren Controller besser funktionieren.

Schließlich sagen wir dem Arduino, dass er die Überprüfung stoppen soll, welche Keyboard.end

Schritt 8: Bewegung in Unity codieren:

Codierung der Bewegung in der Einheit
Codierung der Bewegung in der Einheit

Lassen Sie mich Ihnen zuerst sagen, dass ich das für ein 2D-Spiel mache, also

die Beispiele, die Sie sehen werden, sind dafür gebaut. Hauptsächlich bedeutet, dass ich Vektor2 verwende, wenn Sie in 3D arbeiten, verwenden Sie Vektor3. weil Sie sich um eine zusätzliche Dimension der Bewegung in 3D kümmern müssten.

Der Grund, warum ich die Tastaturemulation auf der Arduino-Seite verwendet habe, ist, dass Unity etwas eingebaut hat, um Tasten auf der Tastatur zu erkennen, die wir verwenden können.

Wenn Sie Ihr Projekt in Unity öffnen, gehen Sie zu Bearbeiten -> Projekteinstellungen -> Eingabe. Sie können in Ihrem Inspektor sehen, dass der Eingabemanager gestartet wird. Wenn Sie auf Achsen klicken, können Sie eine ganze Reihe von Eingabenamen sehen, die normalerweise für PC-Controller wie die, die wir jetzt machen, verwendet werden. Die beiden Eingänge, die wir verwenden werden, sind Horizontal und Vertikal, die überprüfen, ob Sie es erraten haben W-A-S-D.

Zuerst möchten Sie ein Objekt in Ihrer Einheitsszenenhierarchie erstellen, das Ihr Spieler sein wird. In meinem Fall dieser lustige kleine Kerl. Das kann alles sein, was Sie brauchen, aber für mein Spiel habe ich diesen Kerl gemacht.

Schritt 9:

Bild
Bild

Sie möchten diesem Spieler 2 Dinge geben. Ein Boxcollider 2d und

a Rigidbody 2d und bearbeiten Sie sie wie im Bild oben.

Schritt 10:

Bild
Bild

Dann möchten Sie in Ihren Projektordner gehen und ein

C#-Skript. Welche ich PlayerMovement genannt habe.

In diesem Skript werden Sie 2 Variablen definieren. Ein öffentlicher Schwimmer, den ich moveSpeed nenne. Welche bestimmt, wie schnell du fährst. Und einen privaten Rigidbody2D, den ich RigidPlayer nenne. Welches wird für Ihre Spieler starre Körper suchen.

Vergessen Sie nicht, zu Ihrem Unity-Editor zu gelangen, klicken Sie auf Ihren Player, fügen Sie dieses neue Skript hinzu, indem Sie es in den Inspektor ziehen und einen Zahlenwert für moveSpeed festlegen.

Schritt 11:

Bild
Bild

Jetzt möchten Sie in Ihrem Start() eine Sache tun und das ist zu

Stellen Sie sicher, dass Ihr RigidPlayer Ihren Payer Rigidbody 2d finden kann. Das machst du mit der folgenden Codezeile:

Schritt 12:

Bild
Bild

Dann gehen wir zu update() über. Hier gehen wir hin

um den Spieler zu bewegen.

Wir machen das mit einer ziemlich einfachen if-Anweisung, die die negativen und positiven Tasten von Horizontal (AD) und Vertikal (SW) betrachtet und diese als Zahl anwendet, um zu erzwingen, dass wir unseren Starrkörper 2d aufsetzen, um unseren Spieler hineinzuschieben eine Richtung. Diese Zahl wird mit der Variable moveSpeed multipliziert.

Schritt 13:

Bild
Bild

Schließlich möchten Sie sicherstellen, dass sich Ihr Player nicht mehr bewegt, wenn

du drückst nichts. Das gefällt dir so:

Wenn Sie nun Ihre 3 anderen Schaltflächen für alles verwenden möchten, tun Sie dies mit dieser if-Anweisung: if(Input. GetKeyDown(Keycode. Space))

für die Leertaste und setzen Sie anstelle des Leerzeichens den Buchstaben der anderen Tasten, die Sie für die anderen Tasten gewählt haben.

Schritt 14: Anschließen von Lichtern an Arduino

Anschließen von Lichtern an Arduino
Anschließen von Lichtern an Arduino

·

Was Sie benötigen, um dieses Teil anzuschließen:

· 9 Überbrückungsdrähte

· 4 Widerstände

· 4 LEDs

· 1 Arduino Uno + USB-Kabel

· Steckbrett

Der Anschluss für die Lichter erfolgt über das Uno.

Es wird am Ende wie dieses Bild oben aussehen:

Sie schließen die Widerstände an die lange Seite der LEDs an. Und dann schließen Sie einen Jumper von einer digitalen Pinnummer am Uno an die Widerstände an. In diesem Fall habe ich die digitalen Steckplätze 9 – 10 -11 -12 verwendet. Diese Zahlen sind relevant, wenn wir zum Code für die Lichter gelangen.

Von dort aus möchten Sie einen Jumper vom Bodensteckplatz Ihres Arduino Uno an die Stelle auf Ihrem Board anschließen, wie mit dem schwarzen Kabel auf dem Bild oben zu sehen.

Dann möchten Sie 4 Jumper haben, die alle in das kurze Ende jeder LED führen

Schritt 15: Codieren des Arduino Uno

Codierung des Arduino Uno
Codierung des Arduino Uno

Okay, zuerst werden wir unsere Variablen noch einmal definieren

Also zuerst, welche digitalen Eingänge wir für unsere Leuchten verwenden. Und wir werden ein Zeichen namens myCol erstellen[20]

Schritt 16:

Bild
Bild

Dann wollen wir im Setup den Serial.begin erneut durchführen. Setzen Sie alle unsere LEDs auf den Ausgang und schalten Sie sie alle beim Start aus.

Schritt 17:

Bild
Bild

Und schließlich möchten Sie Ihre Schleifenfunktion schreiben.

Dadurch liest der Arduino alle Daten ein, die über seriell eingehen, bis eines von zwei Ereignissen eintritt. Entweder wird ein Zeilenvorschubzeichen erkannt; dies wird durch lf identifiziert, das auf 10 gesetzt ist und das erste Argument ist oder eine bestimmte Anzahl von Bytes eingelesen wurde. Dies ist das dritte Argument und wird in diesem Beispiel auf nur ein Byte gesetzt. Die Daten werden in der Variablen myCol gespeichert, die auf char und ein Limit von 20 gesetzt ist. In readBytesUntil ist dies das zweite Argument. Oder eine andere Möglichkeit, es zu erklären, ist Serial.readBytesUntil(terminatorCharacter, buffer, byteLimit);

Und die if-Anweisungen stellen sicher, dass bestimmte Lichter eingeschaltet werden, wenn Unity das Signal gibt. In diesem Fall habe ich 4 verschiedene farbige Lichter erhalten, damit ich Einheit g für das Einschalten der grünen LED, b für das Einschalten der blauen LED, r für das Einschalten der roten LED und y für das Einschalten der gelben LED senden kann.

Schritt 18: Kodierungslichter Einheitsseite:

Kodierungslichter Einheitsseite
Kodierungslichter Einheitsseite

Oke 2 Dinge zuerst, bevor wir darauf eingehen.

1. Gehen Sie in Ihrem Arduino-Codierprogramm zu Tool -> Port -> und überprüfen Sie, auf welcher COM Ihr Uno ist. In meinem Fall ist es COM3 (dies wird im Code wichtig sein)

2.in Unity Gehen Sie zu Bearbeiten -> Projekteinstellungen -> Player, klicken Sie dann im Inspektor auf andere Einstellungen, gehen Sie zu Api-Kompatibilitätsstufe und wechseln Sie von. NET 2.0-Subnetz zu nur. NET 2.0

Okay das ist erledigt. Lassen Sie uns darauf eingehen.

Klicken Sie mit der rechten Maustaste auf Ihre Hierarchie und klicken Sie auf Leer erstellen.

Dies ist ein leeres Spielobjekt, das nur in Ihrem Spiel existiert, um ein Skript für uns zu speichern. Ich habe dieses Objekt Init genannt.

Schritt 19:

Bild
Bild

Gehen Sie dann in die Registerkarte "Projekte" und erstellen Sie ein neues C#-Skript

und nenne es Senden.

Das erste, was Sie tun, ist, diese in die Zeilen in den using-Abschnitten Ihres Codes zu schreiben:

Verwenden von System. IO. Ports;

Verwenden von System. Threading;

Dadurch können wir die SerialPort-Variable verwenden

Schritt 20:

Bild
Bild

In diesem Skript werden wir die folgenden Variablen erstellen. Beachten Sie nun, dass ich COM3 dort habe. Dies kann für Sie anders sein, als wir zu Beginn dieses Schritts besprochen haben. Wenn dies der Fall ist, ersetzen Sie die 3 durch die Zahl, die für Sie angegeben wurde.

Schritt 21:

Bild
Bild

Am Anfang sagen wir, dass das zu verwendende Skript OpenConnection ist

Funktion, die wir gleich schreiben werden

Das Update ist eher ein Test als alles andere, aber wenn Sie es einschließen möchten, ist es zum Testen von Nachrichten, die an Unity gesendet werden. Kann man ehrlich ignorieren.

Schritt 22:

Bild
Bild

Oke jetzt für diese OpenConnection-Funktion. Das ist nur ein großes

if/else-Anweisung, die die Verbindung offen hält, kopieren Sie sie einfach wie geschrieben und Sie sollten in Ordnung sein.

Schritt 23:

Bild
Bild

Erinnern Sie sich jetzt an den Arduino-Code, nach dem ich gesucht habe

Signale, die Einheit an sie senden wird.

naja hier passiert das. In meinem Fall habe ich 4 Lichter angeschlossen, also habe ich 4 Funktionen geschrieben, die extrem einfach sind. Alles, was sie tun, ist, wenn sie angerufen werden, senden sie einen Brief an arduino. Wenn Arduino diesen Buchstaben erhält, leuchtet das Licht auf, das diesem Buchstaben entspricht.

Schritt 24:

Bild
Bild

Sie fragen sich vielleicht, wie ich es dazu bringe, das zu nennen

Funktion? Nun, Sie tun es mit einer einfachen Zeile in einem Ihrer anderen c#-Skripte, die Sie für Ihr Spiel verwenden. Sending. NameFunctionhere();. In meinem Spiel hat der Spieler beispielsweise die Aufgabe, 4 farbige Kugeln zu sammeln. Also habe ich ein kleines Skript geschrieben, das sicherstellt, dass er, wenn er sich einem nähert und den rechten Knopf drückt, ihn aufnimmt und dem Arduino das Signal sendet, dass in diesem Fall die gelbe Kugel aufgenommen wurde. Damit es weiß, muss ich die gelbe LED einschalten:

Sie können diese eine Codezeile an einer beliebigen Stelle platzieren. Wenn Sie möchten, dass es beim Start des Spiels aufleuchtet, geben Sie es in die Startfunktion ein. Möchte, dass es aufleuchtet, wenn er stirbt, setze es in deine Funktion für den Tod des Spielers. Experimentiere ein bisschen herum. Ich entscheide mich dafür, die Lichter zu einer Art UI-Element außerhalb des Spiels zu machen, um die Kugeln zu verfolgen, die Sie sammeln müssen, ohne den Bildschirm zu überladen.

Empfohlen: