Aller au contenu

FOS Teleport

Version 1.0.1 · exige FOS Essentials Core 1.0.0 ou plus récent

Téléportation à sens unique A → B, avec trois déclencheurs. Exige FOS Essentials Core 1.0.0.


Composant Déclencheur Requis sur le GameObject
FOSTeleportInteract Interaction du joueur (« Use ») Un Collider
FOSTeleportTrigger Entrée dans un volume Un Collider avec Is Trigger activé
FOSTeleportButton Clic sur un Button d’interface Un Button référencé dans l’inspecteur

Les trois dérivent de FOSTeleporterBase, qui porte la destination, les options et le déplacement lui-même. Ajouter un quatrième déclencheur demande une classe de trois lignes.

Menu : Add Component > FOS Essentials > Teleport > ...


  1. Posez le composant sur l’objet qui déclenche la téléportation.
  2. Créez un GameObject vide à l’endroit où le joueur doit arriver, orientez-le dans la direction voulue, puis glissez-le dans Destination. C’est sa rotation qui est utilisée, pas seulement sa position.
  3. Pour la variante bouton : glissez le Button dans son champ, puis cliquez sur Wire this Button. Le OnClick est rempli automatiquement.

Option Effet
Keep momentum Conserve la vitesse du joueur. Désactivé par défaut : arriver à pleine vitesse le fait glisser ou tomber.
Align play space VR uniquement. Oriente tout l’espace de jeu vers la destination, pas seulement le joueur. À utiliser quand la destination doit être regardée précisément.
Cooldown Secondes avant que le téléporteur puisse se redéclencher. 0,5 s par défaut.
Teleport sound AudioSource joué localement. Facultatif.
On teleport Composants prévenus par l’événement public OnFOSTeleported().

L’API VRChat refuse de déplacer un joueur distant — ClientSim le dit explicitement : « Teleporting remote players will do nothing ». Chaque client déplace donc son propre joueur. Conséquences :

  • pas de réseau, pas d’ownership, pas de bande passante ;
  • un joueur téléporté l’est pour tout le monde, puisque VRChat synchronise déjà sa position ;
  • téléporter quelqu’un d’autre est impossible avec ce composant. Ce serait un autre outil, avec de la synchronisation.

OnPlayerTriggerEnter se déclenche sur tous les clients, pour chaque joueur entrant dans le volume. Sans filtrage, un joueur distant traversant le trigger téléporterait le joueur local, à l’autre bout du monde. FOSTeleportTrigger vérifie player.isLocal avant toute chose.

Si la destination de A se trouve dans le volume de B et réciproquement, le joueur fait l’aller-retour sans fin. Le cooldown limite les dégâts, mais la vraie correction est de placer le point d’arrivée hors du volume du téléporteur d’en face.

Le verrou du cooldown est posé avant le déplacement : se téléporter fait sortir et entrer le joueur dans des volumes, et ces événements peuvent revenir dans la même image.


Un nouveau déclencheur n’est qu’une classe dérivant de FOSTeleporterBase qui appelle TeleportLocalPlayer() :

using UdonSharp;
using UnityEngine;
namespace FOS.Teleport
{
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class FOSTeleportOnTimer : FOSTeleporterBase
{
private void Start()
{
SendCustomEventDelayedSeconds(nameof(TeleportLocalPlayer), 10f);
}
}
}

Rappel : le nom de la classe doit correspondre exactement au nom du fichier .cs, et le program asset est créé tout seul au prochain chargement de l’éditeur.