HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

0 Shares

Nachdem wir die Menübewegung freigeschaltet haben – die sehr reibungslos funktioniert – müssen wir uns nun an die Arbeit am Blickmanager machen, aber zuerst müssen wir eine Kurskorrektur vornehmen.

Ein Missverständnis darüber, wie Raycasting meinerseits funktioniert, zwang mich, einen Teil der dynamischen Benutzeroberfläche zu überdenken, an der wir in dieser Serie gearbeitet haben. Die meisten dieser Tutorials sind noch nicht erschienen, daher könnte ich sie leicht reparieren und diese Serie makellos aussehen lassen, so dass die meisten nicht klüger bleiben. Ich glaube jedoch, dass es weitaus wertvoller ist, aus Fehlern zu lernen als ein fehlerfreies Tutorial.

Etwas, das ich in meiner Zeit mit Raycasting in der Dokumentation übersehen haben muss; Wenn ein Strahl auf ein Objekt mit einer gültigen Ebene trifft, stoppt er und gibt an diesem Punkt seine hitInfo zurück. Ich war immer davon ausgegangen, dass es weitergehen und das nächste Objekt treffen würde und so weiter. Nun, zu wissen, dass die RaycastHit Als Parameter verwendet wird, ist kein Array, hätte dies deutlich machen sollen, aber die Situation war für mich nie eingetreten – bis jetzt.

Dieses System, das auf diesem Missverständnis beruht, muss jetzt eine andere Richtung einschlagen. Glücklicherweise ist es kein großes Unterfangen, unser Projekt hier zu überarbeiten.

Vorher: Erstellen einer dynamischen Benutzeroberfläche für die HoloLens, Teil 7 (Entsperren der Menübewegung)

Schritt 1: Lerne aus meinem Fehler

Wenn ich beim Erstellen dieser Serie das Transformationswerkzeug wie den ursprünglichen Plan auf eine eigene Ebene lege, damit wir die von uns erstellten Werkzeuge verwenden können, wird das dahinter stehende Objekt abgewählt, das eigentlich das Objekt ist, das wir benötigen ausgewählt werden, um zu manipulieren. Dies würde offensichtlich nicht funktionieren.

Da das Menü den Cursor als Positionsreferenz verwendete und der Cursor nun auf das Menü traf, bewegte es das Transformationsmenü ständig in Richtung Kamera, bis der Cursor auf eine andere Oberfläche bewegt wurde.

Glücklicherweise gab es viele Ansätze, um dieses Problem zu beheben.

Der Blickmanager ist der Hauptbestandteil des Mixed Reality Toolkit dass wir auch unser System gebunden haben. Es sendet einen Strahl aus, um die Stelle zu finden, an der sich der Cursor befindet. Wir verwenden diesen Cursor und den damit verbundenen Strahl, um das ausgewählte Objekt zu bestimmen und als Positionsreferenz für unsere Werkzeuge zu verwenden.

Physics.RaycastAll ist eine Version von Raycasting, die ein Array von zurückgibt RaycastHits. Dies schien ein gültiger Weg zu sein. Aber als ich mich als Option damit beschäftigte, schien es weit mehr zu sein, als nötig war, und ich wollte auch vermeiden, das gesamte Eingabesystem für das zu überarbeiten Mixed Reality Toolkit.

Die Lösung, auf die ich gestoßen bin, bestand darin, einen zweiten Raycast zu erstellen, um die Position für unser Menü zu finden und das aktuell ausgewählte Objekt zu bestimmen, während der Raycast vom GazeManager seine Arbeit erledigen und die Interaktion mit unserem Menü ermöglichen kann.

Schritt 2: Richten Sie die Ebenen ein

Zunächst müssen wir eine Ebene erstellen, auf der unser Transformationswerkzeug vorhanden sein soll.

Klicken Sie im Unity-Hauptmenü auf “Bearbeiten”, dann auf “Projekteinstellungen” und “Tags und Ebenen”. Sie gelangen zu dieser “Inspector” -Ansicht. Im Benutzerebene 23 Art TransformTool und drücken Sie die “Enter” -Taste.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Um diese neue Ebene unserem Transformationswerkzeug zuzuweisen, wählen Sie das Objekt “TransformUITool” in der Ansicht “Hierarchie” aus und klicken Sie im “Inspektor” auf das Dropdown-Menü neben der Bezeichnung “Ebene” und wählen Sie “TransformTool”.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Wenn das Fenster “Ebene ändern” angezeigt wird, wählen Sie “Ja, untergeordnete Elemente ändern”.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Wählen Sie “InputManager” in der Ansicht “Hierarchie”. Klicken Sie in der Ansicht “Inspektor” auf den Pfeil neben Raycast-Ebenenmasken. Klicken Sie auf das Dropdown-Menü für “Element 0”. Wählen Sie “TransformTool”.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

wd

Schritt 3: Aktualisieren Sie die Bewegungsklasse des Transformationsmenüs

Jetzt müssen wir einige Änderungen an unserer Bewegungsklasse gegenüber der vorherigen Lektion vornehmen. Während wir den Cursor nicht mehr verwenden, um unsere Position zu bestimmen, verwenden wir ihn immer noch, um die Drehung unseres Menüs zu bestimmen.

Zuerst müssen wir die Zeile hinzufügen Vector3 menuPosition; zu unseren Feldern.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Jetzt müssen wir in unsere schauen Aktualisieren() und fügen Sie die Zeile hinzu menuPosition = NRSRManager.menuPosition; zum Anfang dieser Methode.

Als nächstes müssen wir jede Instanz von ersetzen cursor.transform.position mit menuPosition beim Verlassen der .x .y oder .z dahinter.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Schritt 4: Aktualisieren Sie den NRSR-Manager

Im NRSR-Manager finden die meisten Aktualisierungen statt. Hier werden wir unseren neuen Raycast sowie einige Fallen erstellen, um sicherzustellen, dass wir unser fokussiertes Objekt halten, wenn wir uns tatsächlich auf das Transformationswerkzeug konzentrieren. Gleichzeitig wollen wir aber durchkommen können, wenn das Objekt oder das Werkzeug nicht im Fokus steht.

Fügen Sie dem NRSR-Manager die folgenden Felder hinzu:

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

In der Start () -Methode müssen wir unsere festlegen Ebenenmaske.

Ebenenmaske:Eine Ebenenmaske ist ein Werkzeug, mit dem ein Strahl den Collider eines bestimmten Objekttyps treffen kann. Eine Ebenenmaske wird eingerichtet, um bestimmte Ebenen auszuwählen und die Ebenen zu deaktivieren, die Sie ignorieren möchten. In der letzten Aktion von Schritt 2 haben wir gesehen, wie es in der Benutzeroberfläche aussieht. Im Code verwenden wir Bitmasken, um Ebenenmasken zu ändern, die wir mit einem Bitverschiebungsoperator erstellen ( <<).

Im folgenden Beispiel setzen wir die Ebenenmaske zu Ebene 23 oder unserer Ebene des Transformationswerkzeugs.

In der Zeile nach unserer Ebenenmaske Erklärung, wir drehen die Ebenenmaske. Die Aufgabe des bitweisen Komplementoperators (~ ) ist eine Bitmaske zu invertieren. Es geht von Schicht 23 bis zum Betrachten von allem außer Schicht 23.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Hier ist eine Aufschlüsselung unserer Aktualisieren() Methode.

Falls unser SelectedObject verwendet das Transformationswerkzeug sofort verlassen. Führen Sie unsere RaycastToHoldFocusedObject () worauf wir in Kürze eingehen werden. Als nächstes setzen wir unsere menuPosition auf die hitInfo.point dass wir in der erstellen RaycastToHoldFocusedObject () Schließlich in der letzten Bedingung (ansonsten) Block haben wir ersetzt, die FocusedObject Logik mit einem Test, der darauf basiert, ob wir das Transformationswerkzeug betrachten oder nicht. Der Bool-Name wäre genauer zu nennen holdSelectedObjectLookingAtTransformToolOrObject aber es wurde ziemlich lächerlich, wie es war.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Als nächstes kommt unser RayCastToHoldFocusedObject () Methode.

Raycasts werden im Allgemeinen in if-Anweisungen ausgeführt und geben true oder false zurück. Genau das haben wir hier. Wir verwenden die Position und den Vorwärtsvektor unserer Kamera wie für den Strahl selbst. Wenn der Strahl nichts trifft, stellen wir unseren ein Anschauen bool zu false und auswerfen. Wenn wir etwas anschauen und wir haben eine FocusedObjecttesten wir, ob der Name des FocusedObject und der Name des Objekts, das vom Strahl getroffen wird, sind gleich. Wenn ja, stellen Sie unsere Anschauen bool zu wahr. Wenn sie nicht gleich sind Anschauen zu falsch. Schließlich, wenn der Strahl überhaupt nichts getroffen hat, eingestellt Anschauen zu falsch.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Endlich in unserer Bounding-Box-Klasse, in der OnFocusExit () Methode testen wir, ob entweder UsingTransformTool oder Anschauen sind wahr. Wenn ja, gehen Sie. Dadurch bleibt unser Objekt fokussiert, wenn das Transformationswerkzeug das Ziel ist.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 8 (Raycasting & the Gaze Manager)

Aktualisieren Sie Dateien für diejenigen, die kopieren und einfügen möchten. NRSRManager, BoundingBox und TransformToolMenuMovement

OK, kein Abwürgen mehr. Als nächstes werden wir unser Objekt transformieren und dann in einem zukünftigen Leitfaden an Skalierung und Rotation arbeiten.

Weiter oben: Erstellen einer dynamischen Benutzeroberfläche für die HoloLens, Teil 9 (Verschieben unserer Objekte)

0 Shares