Freigeben über


World Locking: Physics Beam-Beispiel

Das Physics Beam-Beispiel veranschaulicht einige virtuelle Aktionen im physischen Raum, die durch das weltgebundene Koordinatensystem von World Locking Tools ermöglicht werden.

Hintergrund

Bei HoloLens kann sich die Beziehung zwischen einem Raumanker und dem Kopf oder anderen Raumankern jederzeit ändern, aufgrund von eingehenden Sensordaten oder der Neuverarbeitung vorhandener Daten.

Die Raumanker von Unity reagieren auf Änderungen der Position des zugrunde liegenden Raumankers, indem sie das daran angefügte GameObject mit sich ziehen. Diese Bewegung verursacht Schwierigkeiten bei der physischen Simulation:

  • Da die Position des räumlich verankerten GameObjects in jedem Frame explizit durch den Raumanker festgelegt wird, kann sie nicht durch die Simulation festgelegt werden (z. B. durch einen Impuls).
  • Da der Raumanker die Position des zugehörigen GameObjects häufig aktualisiert, scheint er nicht relativ zu anderen bewegungslosen RigidBodies zu ruhen.
  • Aufgrund der impliziten Verschiebung des Unity-Koordinatensystems, wenn Raumanker die Koordinaten von statischen Hologrammen anpassen, um sie relativ zur realen Welt zu fixieren, werden physikalische Berechnungen wie Routen und Flugbahnen verfälscht. Ein perfekt auf ein Hologramm ausgerichtetes Projektil verfehlt beispielsweise dennoch sein Ziel, wenn das Hologramm zwischen der Berechnung der Flugbahn und dem Erreichen des Ziels durch seinen Raumanker neu positioniert wird.

Wenn die Beziehungen zwischen den gemessenen Raumankern und den sichtbaren virtuellen Objekten, die mit ihnen verbunden sind, nicht mehr übereinstimmen, werden die virtuellen Objekte nicht wie die Raumanker von Unity angepasst, sondern World Locking Tools passt die Kopftransformation an, um die wahrgenommenen Artefakte aus diesen Inkonsistenzen zu minimieren. Dadurch erscheinen die virtuellen Objekte konsistent in einem stabilen Koordinatenraum, womit die oben genannten Probleme beseitigt werden.

Erstellen des Beispiels

Für das Beispiel wird die SpatialPerception-Funktion benötigt. Für die Sprachbefehle ist außerdem die Microphone-Funktion erforderlich.

Dieses Beispiel erfordert, dass die folgenden Ebenen den Tags und Layern des Projekts hinzugefügt werden:

  • Pillared
  • umschalten

Ausführen der Demo

HUD mit Steuerelementen

Dieses grundlegende HUD (Head-Up Display) ist nicht spezifisch für dieses Physics Beam-Beispiel, sondern ermöglicht lediglich die Steuerung des World Locking Tools-Verhaltens zur Laufzeit, um dessen Möglichkeiten zu erkunden. Es steht als Drop-In für die Entwicklung beliebiger Anwendungen zur Verfügung, die World Locking Tools nutzen, wie unter Ersteinrichtung von World Locking Tools beschrieben.

Screenshot der Beispiele HUD

Diagnosestatistiken werden standardmäßig angezeigt, können aber über das HUD für die Steuerung deaktiviert werden.

Optionsfelder für den Modus

Das Beispiel kann jederzeit in einem der folgenden Modi verwendet werden:

  • Idle (Leerlauf): Das Beispiel verarbeitet derzeit keine Eingaben. Das HUD und das Optionsfeldmenü verarbeiten natürlich weiterhin Eingaben.

  • Throw Dart (Wurfpfeil): Auf der Grundlage physikalischer Gesetze wird eine Flugbahn berechnet und angezeigt. Der angezeigte Bogen zeigt den Weg an, den ein (per Auswahlgeste) abgefeuertes Projektil nehmen wird. Der geworfene Pfeil folgt einer ballistischen Flugbahn und prallt an allen Kollisionsflächen – darunter auch an den Gittern für die räumliche Nachbildung (Spatial Reconstruction, SR) – ab, auf die er trifft.

    Diese Pfeile sind entfernbar, wie unten beschrieben.

  • Add Pillars (Säule hinzufügen): Über eine Auswahlgeste wird ein Strahl in angegebener Richtung in die Welt geworfen. Bei Auftreffen auf eine kollisionsfähige Fläche wird an dieser Stelle eine vertikale Säule zur Szene hinzugefügt.

    Jede hinzugefügte Säule ist kollisionsfähig und kann wie unten beschrieben als Strahlenstütze dienen. Es werden jedoch zwei Arten von Säulen hinzugefügt:

    • Steht die Säule auf einer als entfernbar gekennzeichneten Oberfläche, wird sie physisch simuliert (sie kann z. B. umgestoßen werden).
    • Andernfalls ist die Säule kollisionsfähig, aber statisch.

    Effektiv bedeutet diese Regel, dass eine dem SR-Gitternetz hinzugefügte Säule statisch ist, während sie ansonsten dynamisch ist.

    Säulen sind entfernbar.

  • Add Beam (Strahl hinzufügen): Bei der ersten Auswahl wird ein Strahl in die Szene geworfen, um den ersten Endpunkt des Strahls zu bestimmen. Wenn der Auswahlstrahl dann durch die Szene bewegt wird, wird eine Linie vom ersten Endpunkt zum aktuellen Endpunkt gezogen. Die zweite Auswahlgeste erzeugt einen Strahl, der sich zwischen dem ersten und dem aktuellen Endpunkt erstreckt.

    Um den Strahl mit den Endpunkten auf den Säulen abzustimmen, ist ein Raum erforderlich, in dem die Endpunkte der Säulen relativ zueinander fixiert bleiben.

    Strahlen sind entfernbar.

  • Remove Objects (Objekte entfernen): Wenn das Raycast-Objekt entfernbar ist, wird es aus der Szene entfernt. Alle Objekte, die von dem entfernten Objekt gestützt werden, fallen dann herunter.