Teleportieren in VR

Teleportieren ist in VR Games eine häufig anzutreffende Fortbewegungsmethode. Einerseits kann so der Virtual Reality Sickness vorgebeugt werden und andererseits ist die Fortbewegung nach etwas Eingewöhnung sehr intuitiv. Dass die Implementierung mit ein paar Tricks gar nicht schwer ist, zeige ich dir in diesem Artikel.

Grundlegende Mechanik

Für jene die sich nicht sicher sind was mit “Teleportieren in VR” gemeint ist, möchte ich es hier kurz beschreiben. Alle besseren VR Systeme unterstützen Room-scale (Stand 2019). Da die VR Spielfläche in der Regel nicht größer als 2×2 Meter ist, reicht diese nicht, um sich durch größere virtuelle Welten zu bewegen. Teleportieren / Beamen ist eine mögliche Lösung dieses Problems.

In der Regel funktioniert diese Steuerung folgendermaßen: Der Spieler zielt mit seinem 3DOF Controller mittels einer Art Laserpointer auf die Stelle an die er sich teleportieren möchte. Meist wird dem Spieler noch zusätzlich die Möglichkeit gegeben die Blickrichtung zu wählen, welche nach dem Sprung eingenommen wird.

Teleportieren: Zielen auf Teleportationsziel > Blickrichtung wählen > Teleportieren


Teleportieren in VR (© Robert Richter)

Aber was muss eigentlich teleportiert werden? Bei VR Systemen mit Room-scale (z.B. Oculus Rift, HTV Vive) reicht es nicht nur den Spieler zu teleportieren, es muss das gesamte Spielfeld an den entsprechenden Punkt gebracht werden. Hört sich trivial an, macht das Unterfangen aber um einiges komplizierter.

1. Zielen

Die Auswahl des Teleportationsziels erfolgt über einen simplen Raycast. Der Raycast liefert permanent die aktualisierten Koordinaten für das Teleportieren bis die Teleportation ausgelöst wird.

2. Pointer setzen

Um dem Spieler zentimetergenaues Teleportieren zu ermöglichen, empfiehlt es sich einen Pointer zu verwenden der das aktuelle Teleportationsziel repräsentiert. Dies lässt sich ganz simpel umsetzen, indem man ein Objekt (z.B. eine Kompassnadel) auf die Hit-Koordinate des Raycasts setzt.

VR Pointer mit Blickrichtung – Teleportieren in VR (© Robert Richter)

3. Die Blickrichtung festlegen

Mit Hilfe des Joysticks am Controller wird die Blickrichtung festgelegt. Um dem Spieler die Navigation zu erleichtern wird die aktuelle Blickrichtung mit Hilfe des Pointers / Kompassnadel angezeigt. Um den Pointer anhand des Joysticks zu drehen empfehle ich folgende Funktionen zu verwenden: Mathf.Atan2 und Mathf.Rad2Deg

4. Teleportieren

Bei VR Systemen ohne Room-Scale wären wir an dieser Stelle schon fast fertig. Den Spieler auf die Position des Pointers setzen und dessen Blickrichtung einnehmen. Bei VR Systemen mit Room-Scale ist es etwas komplexer. Hier kann nicht einfach der Spieler an eine bestimmte Stelle transferiert werden, sondern nur der gesamte Room-Scale Spielbereich. Solange sich der Spieler genau im Zentrum des Spielbereichs befindet funktioniert das Beamen genauso einfach wie bei VR Systemen ohne Room-Scale. Steht der Spieler aber etwas abseits des Zentrums ist ohne weiteres Zutun kein genaues Beamen mehr möglich. Verstärkt wird dies durch das Ändern der Blickrichtung beim Beamen.

Die Lösung

Die einfachste Lösung wäre den Pivot Punkt des Room-Scale Objektes auf die Position des Spielers zu setzen. Leider bieten viele Engines (z.B. Unity) diese Möglichkeit nicht an. Natürlich könnte man das Problem auch rein mathematisch lösen. Es geht aber auch um einiges einfacher.
Zuerst gilt es auf die richtige Position zu springen. Das kann einfach dadurch erreicht werden, indem man von der Position des Pointers die lokale Position im
Room-Scale abzieht.
Als nächstes gilt es die Blickrichtung zu ändern ohne die korrekte Position zu verlassen und ohne den Pivot Punkt des Room-Scale Objektes zu manipulieren. Das gelingt mit einem einfachen Trick: Nach dem Teleport auf die korrekte Position wird im World Global Space an der Stelle des Spielers ein leeres Objekt erstellt. Im folgenden PivoX genannt. Der Room-Scale wird zum Kind des PivoX und in die Richtung des Pointers gesetzt. Danach wird die Eltern-Kind Hierarchie zwischen PivoX und dem Room-Scale Objekt wieder aufgehoben.

Noch einfacher?

Ich musste einige Tage nachdenken, um auf diese relativ “simple” Umsetzung der Teleporter Mechanik zu kommen. (Ich verwendete davor eine Lösung mit vielen Mathe Formeln). Falls jemand auf eine noch einfachere Lösung gekommen ist, möge er sich bitte in den Kommentaren oder per Mail bei mir melden. Ich lerne immer gerne noch etwas dazu 🙂

Beispiel Video

Teleportieren in VR Demo Video

Schreibe einen Kommentar