Entwickeln

Locomotion – Beispielszene

Aktualisiert: 05.02.2026
Das Unity Locomotion-Beispiel demonstriert verschiedene Bewegungsmodelle als Beispiele dafür, wie du Fortbewegung in deinen Apps implementieren kannst.
Diese Szene versetzt dich in einen großen Bereich mit statischen Strukturen und Gebäuden. Anschließend kannst du diese Umgebung mit verschiedenen Bewegungsformen erkunden. Diese Bewegungsformen basieren hauptsächlich auf Teleportation, um das Risiko für Unwohlsein der Nutzer*innen zu reduzieren. Ein Teil davon verwendet auch die Daumensticks für Fortbewegung und Drehung.
Wenn das Beispiel gestartet wird, kannst du mit der B-Taste das Menü aufrufen oder verwerfen. Im Menü kannst du mit der A-Taste ein Steuerungsschema auswählen. Nachdem du deine Auswahl getroffen hast, musst du das Menü verwerfen, um das ausgewählte Schema problemlos verwenden zu können. Du hast folgende Kontrollschemata zur Auswahl:
  • Node teleport w/ A button (Knotenteleport mit A-Taste) – Teleportiere dich zwischen den statischen Knoten auf der Karte, indem du mit dem rechten Daumenstick auf sie zeigst und die A-Taste drückst. Mit gehaltener A-Taste kannst du zielen, Knoten auswählen und dich erst teleportieren, wenn du die Taste loslässt. Snap-Turns sind aktiviert.
  • Dual-stick teleport (Dual-Stick-Teleport) – Teleportiere dich an einen gültigen Ort (beliebiger Ort im NavMesh), indem du auf einem Daumenstick nach vorne drückst und den Stick loslässt, wenn du bereit bist. Nachdem du das Zielen gestartet hast, indem du einen Stick nach vorne gedrückt hast, kannst du die gewünschte Blickrichtung nach dem Teleport steuern, indem du einen der Daumensticks drehst. Während du nicht zielst, kannst du mit den Daumensticks deinen Avatar drehen.
  • L Strafe R Teleport (L seitwärts bewegen R teleportieren) – Bewege dich mit dem linken Daumenstick in beliebige Richtungen und teleportiere dich mit dem rechten Daumenstick, indem du ihn wie beim Dual-Stick-Teleport nach vorne drückst. Drehe den rechten Stick während des Teleports, um die Richtung nach dem Teleportieren zu steuern.
  • Nur gehen – Bewege dich mit dem linken Daumenstick in beliebige Richtungen und drehe dich mit dem rechten Stick.
Dieses Thema hilft dir, dich mit den Prefabs, Spielobjekten, Komponenten und Eigenschaften vertraut zu machen, die für diese Funktionalität benötigt werden. Du kannst diese Beispielszene auch als Ausgangspunkt für eine eigene App verwenden.

Übersicht über die Szene

In diesem Abschnitt werden die wichtigsten Prefabs und Spielobjekte für die Kernfunktionalität dieser Szene beschrieben. Dieses Thema behandelt die folgenden Elemente:
  • PlayerController-Spielobjekt – Entwickler*innen können diese Beispiel als Anleitung dazu verwenden, wie ein Spielobjekt die Eingaben der Spieler*innen verarbeitet und deren Bewegungen und Aktionen steuert.
  • LocomotionController-Spielobjekt – Ein untergeordnetes Element von PlayerController, das die Funktionalität für verschiedene Teleportmethoden steuert und zentralisiert.
  • TeleportPoint-Prefabs – Die beim Knotenteleport-Bewegungsschema verwendeten statischen Teleportpunkte. Die Punkte sind miteinander identisch, abgesehen von ihrem Ort. Jeder Punkt braucht eine TeleportPoint-Skriptinstanz und einen Collider. Der Collider wird im Layer mithilfe von TeleportTargetHandler.AimCollisionLayerMask angegeben. Dieser Layer sollte zudem von der Kollision der Spieler*innen ignoriert werden.
  • TeleportDestination-Prefab – Wird verwendet, um das Ziel in Daumenstick-basierten Steuerungsmodellen zu verfolgen und zu aktualisieren. Dieses Prefab wird auch als visueller Indikator angezeigt, wenn sich die Nutzer*innen teleportieren. Es wird nach der Verwendung ausgeblendet, und wenn das Teleportsystem ein neues Prefab benötigt, wird es neu instanziiert.

PlayerController-Spielobjekt

Das PlayerController-Objekt enthält Komponenten und hat untergeordnete Objekte, die für die 3D-Steuerung in VR-Umgebungen benötigt werden. Es enthält auch ein untergeordnetes OVRCameraRig-Objekt, das als VR-Kamera des*der Nutzer*in dient und Zugriffe auf OVRManager bereitstellt.
Wähle PlayerController in der Hierarchie aus und betrachte das Objekt im Inspector-Fenster. Diese Szene enthält die folgenden wichtigen Komponenten:

OVRDebugInfo

Diese Komponente zeigt Debuginformationen in einem HUD an, wenn du die Leertaste drückst, während die Szene ausgeführt wird.

CharacterCameraConstraint

Zuständig für die Bewegung der Charakterkapsel, um sie an das HMD anzupassen, für das Ausblenden der Kamera oder das Blockieren von Bewegungen bei Kollisionen und für das Anpassen der Höhe der Charakterkapsel an den Abstand zwischen HMD und Boden.

Einfache Kapsel mit Stick-Bewegung

Implementiert die Bewegung einer Kapsel als Reaktion auf Nutzer*inneneingaben, z. B. mit Daumensticks oder Tastatur.

LocomotionController-Spielobjekt

LocomotionController ist ein untergeordnetes Objekt von PlayerController und enthält die Komponenten, die Funktionalitäten für verschiedene Teleportmethoden steuern und zentralisieren.
Hier sind zunächst einige allgemeine LocomotionController-Komponenten, die für alle in diesem Beispiel vorgestellten Bewegungsarten relevant sind:
  • LocomotionController – Koordiniert das OVRCameraRig, den OVRPlayerController, und den Unity Character Controller. In diesem Beispiel ist das erste Element ein untergeordneter Knoten von PlayerController und die beiden anderen sind Komponenten von PlayerController.
  • LocomotionTeleport – Die wichtigste Komponente zum Steuern und Zentralisieren der Funktionalitäten verschiedener Teleportmethoden. Der wichtigste Parameter für das Teleportieren ist das Teleport Destination Prefab, das ein Objekt mit einem passenden TeleportDestination-Skript (z. B. unser TeleportDestination-Prefab) enthält, das beim Zielen aktiviert wird. Weitere Informationen findest du im Abschnitt TeleportDestination-Prefab in diesem Thema.
  • TeleportAimVisualLaser – Zuständig für die visuelle Darstellung des Ziellasers in den Ziel-Handlern.
Dieses erweiterbare Set aus Eingabe-, Ziel-, Zielauswahl-, Ausrichtungs- und Übergangskomponenten stellt eine Vielzahl an Fortbewegungskonfigurationen bereit. Diese Komponenten enthalten die Logik für die einzelnen Phasen der Teleportsequenz, inklusive Zielauswahl, Ausrichtung bei der Ankunft und Teleporteffekte. Du kannst also mühelos verschiedene Teleportverhaltensweisen auslösen, indem du unterschiedliche Kombinationen von Komponenten aktivierst. Hier sind einige Komponenten mit ihrer Funktionsweise:
  • Eingabe-Handler – Bestimmt die Eingabequelle.
  • Ziel-Handler – Bestimmt die Zielmethode.
  • Zielauswahl-Handler – Bestimmt die Art der Zielauswahl.
  • Ausrichtungs-Handler – Bestimmt, wie die Blickrichtung nach dem Teleportieren festgelegt wird.
  • Teleportübergänge – Bestimmt, wie die eigentliche Positionsänderung beim Teleportieren verarbeitet wird.
Betrachten wir nun kurz die einzelnen Komponenten. Wir empfehlen, sie dir im Inspector im Unity-Editor einzeln anzusehen. Viele von ihnen enthalten Optionen, mit denen du experimentieren kannst.
Eingabe-Handler sind für die physische Steuerung von Zielvorgang und Teleport zuständig. Mit ihren Optionen kannst du beispielsweise die genauen Eingabeformen für Zielvorgang und Teleport definieren. Du hast folgende Eingabe-Handler zur Auswahl:
  • TeleportInputHandlerHMD – Mit diesem Eingabe-Handler können die Spieler*innen zielen und den Teleportvorgang mit der HMD-Zielauswahl auslösen.
Ziel-Handler steuern die Art und Weise, wie das Zielen funktioniert. Das Zielen kann eine gerade, direkte Linie oder eine Parabelkurve wie bei einem Wurf verwenden. Mit den Optionen der Ziel-Handler kannst du unter anderem Reichweite und verschiedene Aspekte der Parabel definieren. Du hast folgende Ziel-Handler zur Auswahl:
  • TeleportAimHandlerLaser – Dieser Ziel-Handler simuliert das Zielen mit einer geraden Linie.
  • TeleportAimHandlerParabolic – Dieser Ziel-Handler simuliert die Parabelkurve, der ein geworfener Gegenstand folgen würde.
Zielauswahl-Handler bestimmen, ob das aktuell anvisierte Ziel gültig ist, und aktualisieren bei Bedarf das Teleportziel. Mit den Optionen kannst du auswählen, welche Spielobjekt-Layers für die Zielauswahl-Kollision berücksichtigt werden. Du hast folgende Zielauswahl-Handler zur Auswahl:
  • TeleportTargetHandlerNavMesh – Dieser Zielauswahl-Handler gibt nur Orte zurück, die sich im NavMesh befinden. In der Unity-Dokumentation findest du unter Building a NavMesh weitere Informationen zur Erstellung eines NavMesh für deine Szene.
  • TeleportTargetHandlerNode – Dieser Zielauswahl-Handler gibt nur Orte zurück, an denen das Zielsystem eine TeleportPoint-Komponente erkannt hat.
  • TeleportTargetHandlerPhysical – Dieser Zielauswahl-Handler gibt beliebige Orte zurück, die von der Zielauswahl-Kollision erkannt wurden. In diesem Fall ist jeder Ort, an den der*die Spieler*in passt, ein gültiges Teleportziel.
Ausrichtungs-Handler bestimmen, wie die Blickrichtung der Spieler*innen nach dem Teleportieren festgelegt wird:
  • TeleportOrientationHandler360 – Dieser Ausrichtungs-Handler eignet sich für Nutzer*innen in 360-Grad-Umgebungen, die keine Blickrichtung mit der Steuerung auswählen müssen, da sie sich in die Richtung ihrer Wahl drehen können.
  • TeleportOrientationHandlerHMD – Dieser Ausrichtungs-Handler passt die Blickrichtung der Spieler*innen an die Richtung an, in die sie beim Auswählen des Teleportziels mit ihrem HMD gezielt haben.
  • TeleportOrientationHandlerThumbstick – Dieser Ausrichtungs-Handler verwendet einen bestimmten Daumenstick, um die Ausrichtung bei der Ankunft nach dem Teleportieren festzulegen.
Teleport-Übergänge verwalten die eigentliche Positionsänderung der Spieler*innen von ihrer aktuellen Position und Ausrichtung zum Teleportziel sowie Design und Art des Positionswechsels:
  • TeleportTransitionInstant – Dieser Übergang versetzt die Spieler*innen ohne jegliche Effekte sofort.
  • TeleportTransitionBlink – Mit diesem Übergang blendet der Bildschirm kurz in Schwarz über, bevor die Positionsänderung durchgeführt und die normale Ansicht wiederhergestellt wird.
  • TeleportTransitionWarp – Dieser Übergang bewegt die Spieler*innen über eine festgelegte Zeitspanne an den Zielort. Die Blickrichtung der Spieler*innen wird dabei nicht verändert, um den Komfort nicht zu beeinträchtigen.
In diesem Spielobjekt kannst du verschiedene Bewegungsarten erreichen, indem du einzelne Komponenten aktivierst oder deaktivierst. Ein Beispiel dafür findest du, indem du das Skript LocomotionSampleSupport im Spielobjekt SampleSupport öffnest und nach ActivateHandlers suchst. Dort findest du Zeilen wie die folgende, in der die einzelnen Handler des Standard-Steuerungsschemas deklariert werden:
 protected void ActivateHandlers<TInput, TAim, TTarget, TOrientation, TTransition>()
        where TInput : TeleportInputHandler
        where TAim : TeleportAimHandler
        where TTarget : TeleportTargetHandler
        where TOrientation : TeleportOrientationHandler
        where TTransition : TeleportTransition
Du kannst diese Schemata auf ähnliche Weise anpassen oder eigene erstellen. Stelle dabei lediglich sicher, dass du jeden Komponententyp einmal verwendest.

TeleportPoint-Prefabs

TeleportPoint-Prefabs werden beim knotenbasierten (TeleportTargetHandlerNode) Teleportieren verwendet, das statische Knoten als Teleportziele bereitstellt. Jede Szene kann eine Vielzahl an TeleportPoint-Instanzen enthalten.

TeleportDestination-Prefab

TeleportDestination wird bei Bedarf instanziiert, wenn ein*e Spieler*in das aktuelle Ziel aktiv anvisiert. Jede TeleportDestination ist zunächst nicht instanziiert und wird instanziiert, wenn ein Ziel-Handler eine Zielposition bereitstellt. In diesem Moment wird ihre Position Indicator-Transformationskomponente mit der entsprechenden Position aktualisiert. Eine bereitgestellte Zielposition ist nicht unbedingt gültig, sondern gibt nur an, dass der Ziel-Handler etwas gefunden hat, das er als Ziel überprüfen kann.
Die Drehung der Orientation Indicator-Transformationskomponente wird an die Drehung des anvisierten Ziels angepasst. Einfache Teleportziele sollten dies dem Objekt zuweisen, das diese Komponente enthält. Komplexere Teleportziele können es einem Unterobjekt zuweisen, das die Blickrichtung am Ziel unabhängig vom Rest des Zielindikators angibt, etwa dann, wenn World-Effekte benötigt werden. Dieses Objekt ist normalerweise dem Positionsindikator untergeordnet.

In deinen eigenen Apps verwenden

Mit den modularen Handler- und Übergangskomponenten kannst du einen passenden LocomotionController für deine Bedürfnisse erstellen und dabei alle Komponenten, die du nicht verwendest, ausschließen.
In diesem Beispiel kannst du auch mit dem SampleSupport-Spielobjekt experimentieren, das das Skript LocomotionSampleSupport.cs enthält. In diesem Skript kannst du die modularen Handler- und Übergangskomponenten und die Namen der vier vordefinierten Steuerungsschemata anpassen, um zusätzliche Dinge auszuprobieren.