HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 11 (Rotierende Objekte)

0 Shares

In diesem Handbuch wird unsere Serie zum Erstellen einer dynamischen Benutzeroberfläche für die HoloLens fortgesetzt. Sie zeigt, wie Sie die Objekte drehen, die wir bereits in früheren Lektionen erstellt, verschoben und skaliert haben.

Bisher haben wir ein System entwickelt, das den Blick des Benutzers und das, was der Benutzer betrachtet, berücksichtigt, um die Elemente der Benutzeroberfläche zu bestimmen, die er sieht. Bei dieser Art von kontextabhängiger Benutzeroberfläche geht es darum, die Art und Weise, wie wir in Augmented Reality arbeiten, zu optimieren. Ich hoffe für diese Serie, dass die Leute sie als Ausgangspunkt nutzen. Obwohl wir derzeit Objekte hinzufügen und sie im Raum transformieren, könnte dieses System weitaus ausgefeilter sein und viele andere Möglichkeiten zur Interaktion mit Objekten bieten.

Vorher: Erstellen einer dynamischen Benutzeroberfläche für die HoloLens, Teil 10 (Skalieren von Objekten)

Okay, wenn das aus dem Weg ist, kommen wir zum Kern dieser Lektion: Drehen unseres Objekts. Nachdem wir unsere Verschiebungs- und Skalierungswerkzeuge zum Laufen gebracht haben, müssen wir unser Rotationswerkzeug dazu bringen, neben ihnen zu arbeiten. Glücklicherweise ist dies nach der Arbeit der letzten beiden Lektionen eine ziemlich einfache Sache.

Schritt 1: Erstellen Sie die RotateToolInteraction-Klasse

Da der Code zum Verschieben unserer Objekte nur geringfügig vom Drehen unserer Objekte abweicht, verwenden wir in dieser Reihe erneut die Datei MoveTool.cs aus Lektion 9 als Vorlage für unsere RotationToolInteraction-Klasse. Wählen Sie also, wie wir es schon einige Male getan haben, das Unterobjekt “Drehen” des TransformUIToolund klicken Sie auf die Schaltfläche “Komponente hinzufügen”.

Klicken Sie unten in der Komponentenliste auf die Option “Neues Skript” Neues Skript Feld erscheint, geben Sie ein RotateToolInteraction in die Name Feld. Klicken Sie anschließend auf “Erstellen und Hinzufügen”.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 11 (Rotierende Objekte)

Doppelklicken Sie nach Abschluss der Erstellung und Kompilierung auf die Skriptdatei “RotateToolInteraction.cs”, um sie in Visual Studio zu öffnen. Visual Studio wird geladen, wenn Sie es noch nicht geöffnet haben.

Schritt 2: Kopieren Sie den MoveTool.Cs-Code

Doppelklicken Sie nun auf die Datei “MoveTool.cs”, um sicherzustellen, dass sie auch in Visual Studio geöffnet ist.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 11 (Rotierende Objekte)

Suchen Sie nach dem Öffnen von Visual Studio nach der Registerkarte “MoveTool.cs” und klicken Sie darauf, um sie anzuzeigen. Wählen Sie den gesamten Code über die Tastenkombination aus Strg + A., dann schlagen Strg + C. um die gesamte Klasse zu kopieren.

Wählen Sie nun in Visual Studio die Registerkarte “RotateToolInteraction.cs” aus, um sie zur aktiven Klasse zu machen. Verwenden Sie erneut den Tastaturbefehl Strg + A. Um alles in der Klasse auszuwählen, verwenden Sie Strg + V. um den Inhalt, den wir in der Zwischenablage haben, in die neue Klasse einzufügen.

Ersetzen Sie schließlich in Zeile 6 die Klassennamendeklaration “MoveTool” durch “RotateToolInteraction” und klicken Sie auf “Datei” und dann auf “Speichern”. Da die Klassenerstellung nicht mehr möglich ist, müssen wir als Nächstes die Codeänderungen vornehmen, die wir vornehmen müssen.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 11 (Rotierende Objekte)

Schritt 3: Konvertieren Sie einen Vector3 in ein Quaternion

In Unity wird die Objektmanipulation, die Rotation, Position und Skalierung umfasst, in der Transformationskomponente behandelt. Durch den schnellen und einfachen Zugriff auf diese Elemente unserer Transformation mithilfe von Datenstrukturen wie Vector3s und Quaternions (mehr zu diesen beiden Begriffen in Kürze) können wir umfassende Änderungen vornehmen, häufig mit einer einzigen Codezeile.

Ein Vector3 dient zum Verschieben und Skalieren

Wie bereits erwähnt, wird der Datentyp, den wir für Position und Skalierung verwenden, als Vektor3 bezeichnet. Dieser Datentyp besteht aus drei Gleitkommawerten: X., Y., und Z.. Während wir häufig Rotationen auf hoher Ebene für Rotationen verwenden, verwenden Rotationen unter der Haube etwas ganz anderes, worauf wir gleich noch eingehen werden. Hier ist zunächst eine kurze Auffrischung der Hauptcodezeile, mit der wir arbeiten.

Da wir gerade unseren Verschiebungscode kopiert und eingefügt haben, ist die folgende Codezeile (Zeile 57, wenn Sie gefolgt sind) die Zeile, in der unsere Bewegungsaktualisierungen für jeden Frame ausgeführt werden.

HostTransform.position = Vector3.Lerp (HostTransform.position, HostTransform.position + manipulationDelta, PositionLerpSpeed);

Hier aktualisieren wir die Position des HostTransform Objekttransformation mit linearer Interpolation, kurz Lerp. Die lineare Interpolation ist eine Möglichkeit, die Bewegung von Bild zu Bild zu glätten. Im Lerp-Prozess fügen wir die aktuelle Position des Objekts (HostTransform.position) zum manipulationDelta hinzu (oder die Entfernung, die unsere Hand zwischen Frames zurückgelegt hat).

Wenn wir unsere Hand in eine Richtung bewegen, fügen wir eine positive Zahl hinzu. Wenn Sie sich in die andere Richtung bewegen, wird eine negative Zahl hinzugefügt, oder, wenn Sie sich an Ihre Mathematik erinnern, wird diese subtrahiert. Wenn wir unsere Hand überhaupt nicht bewegen, addieren wir schließlich Null und verursachen daher keine Änderung.

Quaternionen sind zum Drehen

Ein Quaternion ist eine komplexe Struktur mit vier Elementen, bei der die mit der Verwendung von Vector3s- und Euler-Winkeln (eine Struktur, die mit einem Vector3 in Unity austauschbar ist) verbundenen Rotationen für Rotationen wie Gimbal Lock nicht auftreten. Während die Mathematik hinter einer Quaternion komplex ist, da wir sie nicht direkt oder intern ändern müssen, sind sie nicht so schlecht. Auf oberster Ebene ist es sehr einfach, mit Quaternionen zu arbeiten. In vielen Fällen verwenden wir Euler-Winkel, die auch eine Vector3-Datenstruktur verwenden, aber wir konvertieren den Vector3 nach Bedarf in ein Quaternion.

Um dies in Aktion zu sehen, ändern Sie Zeile 57, über die wir gerade mit dieser Zeile gesprochen haben:

HostTransform.rotation = Quaternion.Lerp (currentRot, currentRot * Quaternion.Euler (manipulationDelta * DistanceScale), RotationLerpSpeed);

Wenn Sie sich den Code ansehen, werden Sie möglicherweise feststellen, wie ähnlich er dem Verschiebungscode ist. Wieder verwenden wir die aktuelle Drehung des Objekts und multiplizieren es in diesem Fall mit einer Quaternion. Da manipulationDelta ein Vektor 3 und DistanceScale ein Float (eine hochpräzise Gleitkommazahl) ist, können wir sie nicht direkt mit einer Quaternion multiplizieren. Stattdessen verwenden wir die Quaternion.Euler-Methode, die das Produkt der Multiplikation von manipulationDelta und DistanceScale verwendet und eine Quaternion zurückgibt, um unseren Vector3 in die von uns benötigte Ausgabe zu konvertieren.

Falls Sie sich fragen, enthalten sowohl Quaternion als auch Vector3 eine Methode für Lerp.

Schritt 4: Kompilieren, testen und nach Bedarf anpassen

Mit dieser Änderung haben wir jetzt die Möglichkeit, unsere Objekte mit unserem UI-System zu drehen. Erstellen und kompilieren Sie die App, wie wir es schon oft getan haben, und führen Sie sie auf Ihrer HoloLens aus.

Schauen Sie sich eines der Objekte an und drehen Sie es dann mit unserem neuesten Werkzeug. Wenn es sich unkontrolliert dreht, können Sie die Drehzahl leicht einstellen, indem Sie das bewegen Rotations-Lerp-Geschwindigkeit Schieberegler in der Komponente “RotationToolInteraction”.

HoloLens Dev 101: Erstellen einer dynamischen Benutzeroberfläche, Teil 11 (Rotierende Objekte)

Herzlichen Glückwunsch, dies ist ein wichtiger Meilenstein. Ich nenne das zwar nicht das Ende, weil noch einige offensichtliche Dinge fehlen, aber wir müssen Luft holen. Ich werde mit meinem Hund spielen gehen.

Wir sehen uns in der nächsten Lektion, in der wir anhand einer hervorgehobenen Farbe leicht erkennen können, welche der Werkzeuge ausgewählt werden. Wir werden jedoch nicht schummeln, indem wir einen Texturtausch durchführen. Danach werden wir unsere Skalierungsmodi in der App selbst auswählbar machen.

0 Shares