Ich suche nach einer Anleitung zum Verbinden von WiiMote mit Unity 5 als Eingabegerät. Ich habe diese Bibliothek hier gefunden , verstehe aber nicht, wie sie installiert werden soll und welche Voraussetzungen dafür gelten.
Ich suche nach einer Anleitung zum Verbinden von WiiMote mit Unity 5 als Eingabegerät. Ich habe diese Bibliothek hier gefunden , verstehe aber nicht, wie sie installiert werden soll und welche Voraussetzungen dafür gelten.
Antworten:
Ich habe versucht, in die in der Frage verlinkte UniWii-Bibliothek zu schauen , aber die Windows-Download-Seite scheint im Moment ein defekter Link zu sein, und Forenthreads darüber sind meistens 4 Jahre alt. :(
Die Grundidee, eine native Plugin-DLL, auf die von C # mit [DllImport] -Zuordnungen verwiesen wird, ist gut. Ich habe dies erfolgreich für die Schnittstelle mit den Kinect- und Playstation Move-Controllern verwendet. Wenn Sie also einen funktionierenden Download einer aktuellen Version dieses Plugins finden, ist es wahrscheinlich eine bessere und robustere Option als das, was ich vorhabe unten vorhanden.
Die Methode, mit der ich Wii Remote-Informationen in Unity (oder Flash) übertragen habe, besteht darin, ein externes Programm wie GlovePIE unter Windows oder OSCulator unter Mac zu installieren . Diese Programme führen eine programmierbare Eingangsemulation durch, kommunizieren effektiv mit einer Vielzahl von Geräten und bieten Ihnen Tools, mit denen Sie steuern können, wie sie miteinander kommunizieren.
Beide bieten die Möglichkeit, Daten über Open Sound Control- Nachrichten zu senden und zu empfangen , auf die wir in Unity warten, um die von der Wii-Fernbedienung kommenden Daten zu lesen.
Ich werde die GlovePIE-Methode beschreiben, da ich mit der Arbeit unter Windows am besten vertraut bin.
Stellen Sie sicher, dass der Bluetooth-Adapter Ihres Computers eingeschaltet ist.
Führen Sie GlovePIE aus und füllen Sie ein neues Skript mit Folgendes:
(Sie können diese als neue ".PIE" -Datei speichern, um sie später zu laden.)
var.port = 54934
debug = "On: " + Wiimote1.Exists + " Wiimote battery level: " + Wiimote1.Battery + " Rotation: " + Wiimote1.YawSpeed
SendOsc("localhost", var.port, "/wii/1/start", true)
SendOsc("localhost", var.port, "/wii/1/acceleration", tostring(Wiimote1.gx), tostring(Wiimote1.gy), tostring(Wiimote1.gz))
SendOsc("localhost", var.port, "/wii/1/rotationSpeed", tostring(Wiimote1.PitchSpeed in radians), tostring(-Wiimote1.YawSpeed in radians), tostring(Wiimote1.RollSpeed in radians))
SendOsc("localhost", var.port, "/wii/1/analog", tostring(Wiimote1.Nunchuk.JoyX), tostring(Wiimote1.Nunchuk.JoyY))
SendOsc("localhost", var.port, "/wii/1/buttonA", int(Wiimote1.A))
SendOsc("localhost", var.port, "/wii/1/buttonB", int(Wiimote1.B))
SendOsc("localhost", var.port, "/wii/1/buttonC", int(Wiimote1.Nunchuk.C))
SendOsc("localhost", var.port, "/wii/1/buttonZ", int(Wiimote1.Nunchuk.Z))
SendOsc("localhost", var.port, "/wii/1/button1", int(Wiimote1.One))
SendOsc("localhost", var.port, "/wii/1/done", true)
Klicken Sie in GlovePIE auf die Schaltfläche "Ausführen". Es wird jetzt nach Wii-Fernbedienungen gesucht.
Stellen Sie die Wii-Fernbedienung auf eine ebene Fläche (damit die Erstkalibrierung stabil ist).
Drücken Sie gleichzeitig die Tasten 1 und 2 auf der Wii-Fernbedienung.
Alle 4 Anzeigen auf der Fernbedienung sollten blinken - die Wii-Fernbedienung sucht nach Empfängern
Sie können dies ignorieren, einschließlich aller Dialoge, die besagen, dass Sie neu starten müssen (sie lügen).
GlovePIE hat die Fernbedienung gefunden
GlovePIE kalibriert die Sensoren. Halten Sie die Fernbedienung ruhig, sonst wird sie für immer kalibriert (was manchmal sowieso der Fall ist).
Die Fernbedienung ist als Player 1 registriert und sendet Daten über Open Sound Control-Nachrichten.
Das Debug-Feld in GlovePIE sollte anzeigen, dass die Fernbedienung vorhanden ist, den Batteriestand melden und die aktuellen Gierrotationsdaten anzeigen. (Das ist die zweite Zeile des obigen Skripts). Wenn Sie beim Drehen des Controllers keine Gierdaten erhalten, sollten Sie ihn ausschalten und erneut koppeln.
Beachten Sie, dass beim Stoppen des Skripts die Lichter ausgeschaltet werden, die Fernbedienung jedoch weiterhin eingeschaltet ist und der Akku entladen wird. Wenn Sie die Fernbedienung längere Zeit nicht verwenden, halten Sie den Netzschalter gedrückt, um sie auszuschalten. Sie müssen erneut mit Schritt 3 beginnen, wenn Sie es erneut verwenden möchten.
Okay, so erhalten Sie die Daten in Ihren Computer. Jetzt können Sie eine Bibliothek wie OSCuMote ( Download-Link ) verwenden, um die an Port 54934 eingehenden OSC-Nachrichten zu lesen und auf die Daten in Ihren Unity C # -Skripten zuzugreifen.
Ich werde versuchen, das C # -Skript, das ich dafür geschrieben habe, in meinem letzten Projekt zu bereinigen und es als Teil dieser Antwort aufzunehmen.
Obwohl die Antwort von DMGregory wirklich gründlich und gut ist, habe ich eine andere Lösung gefunden, die robuster ist und meinen Anforderungen entspricht. Ich habe eine DLL gefunden (die ich derzeit nicht finden kann, aber irgendwo hochladen und meine Antwort bearbeiten werde, um den Link einzuschließen) und DLLImport und diese Funktionen verwendet
[DllImport ("UniWii")]
private static extern void wiimote_start();
[DllImport ("UniWii")]
private static extern void wiimote_stop();
[DllImport ("UniWii")]
private static extern int wiimote_count();
[DllImport ("UniWii")]
private static extern byte wiimote_getAccX(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getAccY(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getAccZ(int which);
[DllImport ("UniWii")]
private static extern float wiimote_getIrX(int which);
[DllImport ("UniWii")]
private static extern float wiimote_getIrY(int which);
[DllImport ("UniWii")]
private static extern float wiimote_getRoll(int which);
[DllImport ("UniWii")]
private static extern float wiimote_getPitch(int which);
[DllImport ("UniWii")]
private static extern float wiimote_getYaw(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonA(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonB(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonUp(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonLeft(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonRight(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonDown(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButton1(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButton2(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonPlus(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonMinus(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonHome(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getNunchuckStickX(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getNunchuckStickY(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getNunchuckAccX(int which);
[DllImport ("UniWii")]
private static extern byte wiimote_getNunchuckAccZ(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonNunchuckC(int which);
[DllImport ("UniWii")]
private static extern bool wiimote_getButtonNunchuckZ(int which);
Ich habe es geschafft, mit der WiiMote zu kommunizieren und die Funktionalität zu erhalten, die ich brauche.
Der ursprüngliche Herausgeber der DLL unterstützt sie nicht mehr oder kümmert sich nicht mehr darum. Ich habe ihnen eine E-Mail darüber geschickt und sie haben nach einigen Monaten immer noch nicht geantwortet. Ich fand es jedoch in einem Projekt, das in Google Code gehostet wurde ( hier ). Es ist ein vollständiges Projekt mit Beispielen und der DLL.
BEARBEITEN Denken Sie auch daran, wenn Sie diese DLL für eine kommerzielle Anwendung verwenden möchten, müssen Sie sich an den ursprünglichen Herausgeber wenden, um eine Lizenz zu erhalten (wenn Sie eine Antwort von diesen erhalten). Außerdem hatte ich einige Probleme bei der Verwendung dieser DLL beim Erstellen eines 64-Bit-Computers mit 64-Bit-Unity (wenn sie auf einem 32-Bit-Computer erstellt wurde, war alles in Ordnung und lief perfekt auf 64-Bit- und 32-Bit-Computern).