FOS Teleport
Version 1.0.1 · benötigt FOS Essentials Core 1.0.0 oder neuer
Einseitiger Teleport A → B, mit drei Auslösern. Benötigt FOS Essentials Core 1.0.0.
Die drei Komponenten
Abschnitt betitelt „Die drei Komponenten“| Komponente | Auslöser | Nötig am GameObject |
|---|---|---|
FOSTeleportInteract |
Interaktion der Spielenden („Use”) | Ein Collider |
FOSTeleportTrigger |
Betreten eines Volumens | Ein Collider mit aktiviertem Is Trigger |
FOSTeleportButton |
Klick auf einen UI-Button |
Ein im Inspektor referenzierter Button |
Alle drei leiten von FOSTeleporterBase ab, die das Ziel, die Optionen und die Bewegung
selbst enthält. Ein vierter Auslöser kostet eine Klasse von drei Zeilen.
Menü: Add Component > FOS Essentials > Teleport > ...
Einrichtung
Abschnitt betitelt „Einrichtung“- Setze die Komponente auf das Objekt, das den Teleport auslöst.
- Erstelle ein leeres GameObject dort, wo die Person ankommen soll, drehe es in die gewünschte Richtung und ziehe es in Destination. Verwendet wird seine Drehung, nicht nur seine Position.
- Für die Button-Variante: Ziehe den
Buttonin sein Feld und klicke auf Wire this Button. DasOnClickwird automatisch ausgefüllt.
Optionen
Abschnitt betitelt „Optionen“| Option | Wirkung |
|---|---|
| Keep momentum | Behält die Geschwindigkeit bei. Standardmäßig aus: mit voller Geschwindigkeit anzukommen lässt die Person rutschen oder fallen. |
| Align play space | Nur VR. Dreht den gesamten Spielbereich zum Ziel, nicht nur die Person. Sinnvoll, wenn das Ziel genau angeschaut werden muss. |
| Cooldown | Sekunden, bis der Teleporter erneut auslösen kann. Standard 0,5 s. |
| Teleport sound | Lokal abgespielte AudioSource. Optional. |
| On teleport | Komponenten, die über das öffentliche Event OnFOSTeleported() benachrichtigt werden. |
Wissenswertes
Abschnitt betitelt „Wissenswertes“Der Teleport ist lokal, und das ist Absicht
Abschnitt betitelt „Der Teleport ist lokal, und das ist Absicht“Die VRChat-API weigert sich, eine entfernte Person zu bewegen — ClientSim sagt es ausdrücklich: „Teleporting remote players will do nothing”. Jeder Client bewegt also seine eigene Person. Folgen:
- kein Netzwerk, kein Ownership, keine Bandbreite;
- wer teleportiert wird, ist es für alle, denn VRChat synchronisiert die Position ohnehin;
- jemand anderen zu teleportieren ist mit dieser Komponente unmöglich. Das wäre ein anderes Werkzeug, mit Synchronisierung.
Die Trigger-Falle
Abschnitt betitelt „Die Trigger-Falle“OnPlayerTriggerEnter feuert auf jedem Client, für jede Person, die das Volumen
betritt. Ohne Filter würde eine entfernte Person, die durch den Trigger läuft, die lokale
Person am anderen Ende der Welt teleportieren. FOSTeleportTrigger prüft zuerst
player.isLocal.
Das Hin und Her zwischen zwei Teleportern
Abschnitt betitelt „Das Hin und Her zwischen zwei Teleportern“Liegt das Ziel von A im Volumen von B und umgekehrt, pendelt die Person endlos. Der Cooldown begrenzt den Schaden, aber die eigentliche Lösung ist, den Ankunftspunkt außerhalb des Volumens des gegenüberliegenden Teleporters zu setzen.
Die Reihenfolge der Schritte
Abschnitt betitelt „Die Reihenfolge der Schritte“Die Cooldown-Sperre wird vor der Bewegung gesetzt: Ein Teleport lässt die Person Volumen verlassen und betreten, und diese Ereignisse können im selben Frame zurückkommen.
Das Pack erweitern
Abschnitt betitelt „Das Pack erweitern“Ein neuer Auslöser ist nur eine Klasse, die von FOSTeleporterBase ableitet und
TeleportLocalPlayer() aufruft:
using UdonSharp;using UnityEngine;
namespace FOS.Teleport{ [UdonBehaviourSyncMode(BehaviourSyncMode.None)] public class FOSTeleportOnTimer : FOSTeleporterBase { private void Start() { SendCustomEventDelayedSeconds(nameof(TeleportLocalPlayer), 10f); } }}Zur Erinnerung: Der Klassenname muss exakt dem Dateinamen der .cs entsprechen, und
das Program Asset wird beim nächsten Laden des Editors von selbst erzeugt.
