Intel RealSense 3D-Kameras bieten Hand-und-Finger-Tracking für Heim-PCs und ein benutzerfreundliches SDK für Entwickler, was sie zu einer großartigen neuen Eingabemethode für VR-Spiele und Bildschirmspiele macht.
Im Idealfall möchten wir Spiele erstellen, bei denen der Spieler an keiner Stelle Peripheriegeräte berühren muss. Aber wie beim Kinect und dem EyeToy stoßen wir auf Probleme, wenn wir uns einer gemeinsamen Aufgabe stellen: der Eingabe von Text. Selbst die Eingabe eines Zeichennamens ohne Tastatur kann mühsam sein.
In diesem Beitrag werde ich Ihnen mitteilen, was ich über die besten (und schlechtesten!) Möglichkeiten gelernt habe, wie Spieler Text nur mit Gesten eingeben können. Außerdem erfahren Sie, wie Sie das Intel RealSense SDK in Unity einrichten, damit Sie es ausprobieren können in deinen eigenen Spielen.
(Beachten Sie, dass ich mich hier auf die ASCII-Eingabe konzentriere, insbesondere auf das englische Alphabet. Alternative Alphabete und Eingabemodi wie Stenografie, Abkürzung und Kanji können auf andere Weise besser bedient werden.)
Es gibt andere Ansätze für die Eingabe von Text, die keinen Text enthält, aber sie haben Mängel. Wir möchten einen Ansatz entwickeln, der jeden von ihnen verbessert.
Tastaturen sind der Goldstandard für die Texteingabe. Sie können also nur das Tippen auf einer Tastatur in der Luft oder auf einer flachen Oberfläche nachahmen?
Leider ist der Mangel an taktilem Feedback wichtiger als es auf den ersten Blick erscheinen mag. Berührungstypisierung ist in dieser Situation nicht möglich, da Kinästhesie zu ungenau ist, um allein auf Trägheitsbewegungen einzuwirken. Durch die körperliche und reaktionsschnelle Berührung einer Tastatur wird der Finger des Fingers über die Fingerposition informiert und fungiert als fortlaufender Mechanismus zur Fehlerkorrektur. Andernfalls neigen die Finger dazu, vom Ziel abzuweichen, und leichte Positionsfehler treten schnell auf, was ein "Zurücksetzen" der Home-Tasten erforderlich macht.
Unser erstes Experiment mit RealSense für die Texteingabe war das Bestreben, die Fingerabschreibung der amerikanischen Gebärdensprache zu erkennen. Wir haben herausgefunden, dass es mehrere Schwierigkeiten gibt, die diese Entscheidung unpraktisch machen.
Ein Problem ist die Geschwindigkeit. Kompetente Fingerspeller können etwa zwei Buchstaben oder 120 Buchstaben pro Minute blinken. Mit durchschnittlich fünf Buchstaben pro Wort sind das 24 WPM, was selbst unter der durchschnittlichen Schreibkraft von 40 WPM liegt. Ein guter Finger-Speller ist etwa halb so schnell wie ein so mancher Keyboarder.
Ein weiteres Problem besteht darin, dass der Benutzer einen neuen Zeichensatz erlernen muss. Einer der weniger offensichtlichen Werte einer Standardtastatur ist, dass sie mit allen anderen Tools, die wir zum Schreiben verwenden, übereinstimmt. Die gedruckt T im kindergarten lernen wir dasselbe T gesehen auf der Tastatur. Die Benutzer zu bitten, einen neuen Zeichensatz zu erlernen, nur um Text in ein Spiel einzugeben, ist ein No-Go.
Spielkonsolen erfordern bereits regelmäßig eine Texteingabe für Kreditkartennummern, Passwörter, Charakternamen und andere anpassbare Werte. Die typische Eingabemethode besteht darin, eine virtuelle Tastatur auf dem Bildschirm anzuzeigen und einer räumlich empfindlichen Eingabe zu erlauben, auf eine bestimmte Taste zu "tippen".
Es gibt viele Wiederholungen dieses Konzepts. Viele verwenden einen Joystick, um einen Cursor zu bewegen. Andere verwenden möglicherweise eine Hand-Tracking-Technologie wie Intel RealSense oder Kinect, um im Wesentlichen dasselbe zu tun (wobei eine Handbewegung als Tastendruck dient). Stephen Hawking verwendet eine konzeptionell ähnliche Eingabe, die Augenbewegungen verfolgt, um einen Cursor zu bewegen. Alle diese Systeme erzeugen jedoch ein Szenario mit der schlechtesten der beiden Welten, bei dem eine räumliche Einpunkt-Eingabe, im Wesentlichen ein Mauszeiger, zum Arbeiten mit einem Multi-Touch-Gerät verwendet wird. Es ist, als würde man einen Radiergummi verwenden, um jeweils einen Buchstaben einzugeben.
Es wurde einige interessante Arbeit geleistet, um die Joystick-Texteingabe von Leuten wie Doug Naimo bei Triggerfinger schneller und flexibler zu gestalten, aber die Eingabegeschwindigkeit bleibt immer noch weit hinter dem regulären Tippen zurück und ist nur nützlich, wenn bessere oder schnellere Eingabemethoden sind nicht verfügbar.
All das Gerede über die Schwächen alternativer Texteingabemethoden impliziert, dass die bescheidene Tastatur mehrere Stärken hat, die nicht leicht ersetzt oder verbessert werden können. Wie können diese nachgewiesenen Stärken in einem Texteingabesystem erhalten werden, das keine praktischen Peripheriegeräte erfordert? Ich glaube, die Antwort liegt in zwei kritischen Anmerkungen:
In Anbetracht dessen hatte ich ein einfaches, zweihändiges Gestensystem entwickelt, das ich "Facekeys" nenne. So funktioniert das.
Bevor wir auf eine vollständige Tastatur zugreifen, beginnen wir mit einem Nummernblock, einem einfachen Rechner. Wir brauchen zehn Ziffern (0 bis 9) und fünf Operatoren (Plus, Minus, Dividieren, Multiplizieren und Gleiche). Um alle zehn Finger zu verwenden, können wir diese in zwei fünfstellige Gruppen unterteilen und diese als zwei quadratische Pyramiden auf dem Bildschirm darstellen, wobei die Operatoren als eine andere Pyramide dargestellt werden:
Jeder Finger entspricht einer Fläche jeder Pyramide. Jedes Gesicht kann als "Schlüssel" auf einer Tastatur betrachtet werden, daher nenne ich es Gesichtstasten. Die linke Hand gibt Ziffern ein 1 zu 5 indem Sie die Finger einzeln beugen, während der rechte die Ziffern eingibt 6 zu 0. Beugen Sie den gleichen Finger auf beiden Händen gleichzeitig - beide Ringfinger - betätigen Sie beispielsweise eine Gesichtstaste auf der Bedienungspyramide.
Nicht-Ziffern- (aber wesentliche) Funktionen umfassen eine linke Faust, um den angezeigten Wert in den Speicher zu schreiben, eine rechte Faust, um den Speicher zu lesen (und zu löschen), und zwei geschlossene Fäuste, um die Decks zu löschen und eine neue Berechnung zu starten.
Als ich das zum ersten Mal ausprobierte, ging ich davon aus, dass Benutzer, die ihre Hände mit der Hand nach unten halten (als würden Sie auf einer Tastatur tippen), am wohlsten wären. Es stellt sich jedoch heraus, dass eine Position mit nach innen gerichteten Handflächen komfortabler ist und sowohl eine längere Nutzung als auch mehr Geschwindigkeit ermöglicht:
Es stellt sich auch heraus, dass visuelles Feedback vom Bildschirm besonders beim Lernen sehr wichtig ist. Wir können dies über ein bekanntes Taschenrechner-Anzeigegerät bereitstellen, aber es ist auch gut, wenn die Pyramiden bei jedem Strich gedreht und animiert werden, um die Verbindung zwischen einem Finger und dem entsprechenden Facekey herzustellen und zu verstärken.
Dieses System ist komfortabel und leicht erlernbar und auch leicht erweiterbar. Zum Beispiel wird das Fehlen eines Dezimalpunkts und einer Rücktaste schnell frustrierend, aber diese Eingaben lassen sich leicht mit geringfügigen Änderungen anpassen. Erstens kann eine Rechtshänderwelle als Rücktaste wirken. Zweitens kann der Equals Facekey durch einen Dezimalpunkt für die Eingabe ersetzt werden, und eine "Klatschen" -Geste wurde zum Equals-Operator, der das erfreuliche Ergebnis hat, Berechnungen rhythmisch und bescheiden Spaß zu machen.
Ein Taschenrechner ohne Peripheriegeräte ist eine Sache, aber ein typischer Ersatz für über 80 Tastaturen ist etwas ganz anderes. Es gibt jedoch einige sehr einfache und praktische Möglichkeiten, um dieses Keyfacing-Konzept weiterzuentwickeln.
Die Standardtastatur ist in vier Tastenreihen und einer Leertaste angeordnet: Zahlen und Interpunktion mit drei Buchstabenreihen darunter. Jede Reihe wird durch ihre Position im Raum definiert, und wir können dieses Konzept hier verwenden.
Anstatt Ihre Hände zu einem festen Punkt wie der Kamera zu bewegen oder von ihm weg zu bewegen, ist das System flexibler selbstreferenziell. Wir können den Spieler einen bequemen Abstand zwischen den Handflächen definieren lassen; Das Spiel wird diese Entfernung dann intern als einstellen 1-Delta
. Das Äquivalent des Erreichens von verschiedenen Reihen auf der Tastatur bedeutet, die Hände nur näher aneinander zu bewegen oder voneinander zu entfernen: a 2-Delta
Entfernungszugriff auf Tasten "zweite Reihe" und 3-Delta
erreicht die Schlüssel der dritten Reihe.
1-Delta
abgesehen, und sie können tippen EIN zu J; halte sie 2-Delta
abgesehen, und sie können tippen K zu T.Die "Home Keys" sind darauf eingestellt 1-Delta
Abstand und das Keyfacing erfolgt durch Zuordnung von Buchstaben und anderen Zeichen zu einer Reihe von Pyramiden, die das gesamte Alphabet sequentiell abdecken. Experimente deuten darauf hin, dass 3-4 bequeme und leicht reproduzierbare Deltas zwischen berührenden Händen und schulterbreit vorhanden sind. Fachleute finden zwar viel mehr, aber die inhärente Ungenauigkeit einer normalen Kinästhesie dürfte diesen Faktor begrenzen.
Einfache Gesten bieten eine weitere Erweiterungsachse. Die Tastatur Verschiebung Schlüssel zum Beispiel, verwandelt jeden Schlüssel in zwei Schlüssel Ctrl und Alt Tasten erweitern das noch mehr. Einfache, einhändige Gesten würden genau denselben Zugriff auf die Schlüsselebenen schaffen, während Geschwindigkeit und Flexibilität erhalten bleiben. Zum Beispiel könnte eine Faust das sein Verschiebung Schlüssel. Eine "Pistole" -Hand kann auf Bearbeitungsbefehle oder eine beliebige Anzahl von Kombinationen zugreifen. Durch die Verwendung von einhändigen Gesten zum Ändern der Keyfaces kann der Benutzer auf verschiedene Zeichen zugreifen.
Bereit, es selbst auszuprobieren? Zunächst müssen Sie das Intel RealSense SDK installieren und das Plugin für Unity einrichten.
Im Folgenden wird kurz erläutert, wie Sie das RealSense SDK und Unity installieren und einrichten. Wir erstellen eine einfache Testdemo, die die Größe eines Objekts basierend auf der Handbewegung des Benutzers ändert.
Du wirst brauchen:
Möglicherweise möchten Sie auch dieses kostenlose Plugin verwenden, mit dem Sie Unity-Code in Visual Studio schreiben können. Es liegt an dir.
Ich werde das Raumschiff aus dem kostenlosen Space Shooter-Projekt von Unity verwenden, aber Sie können auch einen einfachen Würfel oder ein beliebiges anderes Objekt verwenden, wenn Sie dies vorziehen.
Das Paket mit dem Unity Toolkit für Intel RealSense-Technologie enthält alles, was Sie zum Bearbeiten von Spielobjekten benötigen. Das Unity-Paket befindet sich in der \ RSSDK \ Framework \ Unity \
Mappe. Wenn Sie das RealSense-SDK am Standardspeicherort installiert haben, RSSDK
Ordner wird in sein C: \ Programme (x86) \
(unter Windows).
Sie können das Unity Toolkit wie jedes andere Paket importieren. Dabei haben Sie die Möglichkeit, auszuwählen, was Sie möchten. Für dieses Tutorial verwenden wir die Standardeinstellungen und importieren alles.
Wie Sie im folgenden Bild sehen können, befinden sich jetzt mehrere neue Ordner im Ordner Assets.
Wir gehen nicht darauf ein, was alle Ordner hier sind; Das überlasse ich Ihnen, um nachzuforschen!
Fügen Sie das Schiff der Szene hinzu.
Fügen Sie als nächstes ein gerichtetes Licht hinzu, um dem Schiff etwas Licht zu geben, damit Sie es besser sehen können.
Es sollte so aussehen:
Um dem Spielobjekt Skalierungsfunktionen hinzuzufügen, müssen Sie das hinzufügen ScaleAction Skript. Das ScaleActionScript ist unter der RSUnityToolkit Ordner und in der Aktionen Unterordner.
Nimm einfach das Skript und ziehe es per Drag & Drop direkt auf das Schiff im Szene Aussicht. Sie können jetzt das sehen ScaleAction Skriptparameter in der Inspektor.
Hier habe ich alle Parameter reduziert, um die drei grundlegenden Bereiche des Scale-Skripts anzuzeigen: das Ereignis starten, das Scale-Trigger, und das Ereignis anhalten.Beginnen mit dem Ereignis starten, Erweitern Sie den Pfeil, um den Standardauslöser anzuzeigen. In diesem Fall möchten wir nicht verwenden Geste erkannt, wir wollen benutzen Hand erkannt.
Klicken Sie mit der rechten Maustaste auf Geste erkannt und wählen Sie Löschen. Dann auf der Ereignis starten's Hinzufügen klicken Sie auf und wählen Sie Hand erkannt. Unter Welche Hand?, auswählen und auswählen ACCESS_ORDER_RIGHT_HANDS.
Jetzt werden wir das einstellen Ereignis anhalten. Erweitere die Ereignis anhalten und entfernen Sie das Geste verloren Reihe. Klicken Sie anschließend auf Ereignis anhalten's Hinzufügen Taste und wählen Sie Hand verloren. Neben an Welche Hand?, wählen ACCESS_ORDER_RIGHT_HANDS.
Wir müssen das nicht ändern Scale-Trigger weil es dafür sowieso nur eine Option gibt. Wir werden nur den Standard verwenden.
Das ist es! Speichern Sie Ihre Szene, speichern Sie Ihr Projekt und führen Sie es aus. Sie können das Schiff auf dem Bildschirm mit einer Geste verkleinern.
Wir haben die Ideen hinter der Eingabe von Text diskutiert, ohne ein Peripheriegerät zu berühren, und Sie haben gesehen, wie Sie mit dem RealSense-SDK in Unity beginnen können. Als nächstes liegt es an dir. Nimm, was du gelernt hast und experimentiere!
Zuerst lassen Sie Ihre Demo verschiedene Charaktere basierend auf den Fingern interpretieren, die Sie bewegen. Reflektieren Sie dies anschließend in geeigneter Weise auf dem Bildschirm (Sie müssen meine Pyramidenmethode nicht verwenden!). Fahren Sie dann mit dem Ausprobieren einer anderen Handposition fort, z. B. wenn die Handflächen zur Kamera zeigen, oder einer anderen Eingabebewegung, z. B. dem Drehen eines Rubik-Würfels?
Das Intel® Software Innovator-Programm unterstützt innovative unabhängige Entwickler, die die Fähigkeit besitzen, zukunftsweisende Projekte zu erstellen und zu demonstrieren. Innovatoren nutzen Vortrags- und Demo-Möglichkeiten bei Branchenveranstaltungen und Entwicklertreffen.
Intel® Developer Zone Bietet Tools und Anleitungen zur plattformübergreifenden App-Entwicklung, Plattform- und Technologiedaten, Codebeispiele und Expertenwissen, um Entwicklern bei der Innovation und dem Erfolg zu helfen. Treten Sie unseren Communitys für Internet der Dinge, Android, Intel® RealSense ™ -Technologie, Moderner Code, Spieleentwickler und Windows Laden Sie Tools herunter, greifen Sie auf Entwicklungskits zu, tauschen Sie sich mit gleichgesinnten Entwicklern aus und nehmen Sie an Hackathons, Wettbewerben, Roadshows und lokalen Veranstaltungen teil.