Ir al contenido

FOS Teleport

Versión 1.0.1 · requiere FOS Essentials Core 1.0.0 o posterior

Teletransporte de sentido único A → B, con tres disparadores. Requiere FOS Essentials Core 1.0.0.


Componente Disparador Necesario en el GameObject
FOSTeleportInteract Interacción del jugador («Use») Un Collider
FOSTeleportTrigger Entrada en un volumen Un Collider con Is Trigger activado
FOSTeleportButton Clic en un Button de interfaz Un Button referenciado en el inspector

Los tres derivan de FOSTeleporterBase, que contiene el destino, las opciones y el propio desplazamiento. Añadir un cuarto disparador cuesta una clase de tres líneas.

Menú: Add Component > FOS Essentials > Teleport > ...


  1. Coloca el componente en el objeto que dispara el teletransporte.
  2. Crea un GameObject vacío donde el jugador deba aterrizar, oriéntalo en la dirección deseada y arrástralo a Destination. Se usa su rotación, no solo su posición.
  3. Para la variante de botón: arrastra el Button a su campo y pulsa Wire this Button. El OnClick se rellena automáticamente.

Opción Efecto
Keep momentum Conserva la velocidad del jugador. Desactivado por defecto: llegar a toda velocidad le hace resbalar o caer.
Align play space Solo RV. Gira todo el espacio de juego hacia el destino, no solo al jugador. Úsalo cuando haya que mirar el destino con precisión.
Cooldown Segundos antes de que el teletransportador pueda volver a dispararse. 0,5 s por defecto.
Teleport sound AudioSource reproducido localmente. Opcional.
On teleport Componentes avisados mediante el evento público OnFOSTeleported().

El teletransporte es local, y es intencionado

Sección titulada «El teletransporte es local, y es intencionado»

La API de VRChat se niega a mover a un jugador remoto — ClientSim lo dice explícitamente: «Teleporting remote players will do nothing». Cada cliente mueve por tanto a su propio jugador. Consecuencias:

  • sin red, sin propiedad de objeto, sin ancho de banda;
  • un jugador teletransportado lo está para todos, porque VRChat ya sincroniza su posición;
  • teletransportar a otra persona es imposible con este componente. Sería otra herramienta, con sincronización.

OnPlayerTriggerEnter se dispara en todos los clientes, para cada jugador que entra en el volumen. Sin filtrar, un jugador remoto que atraviese el trigger teletransportaría al jugador local, al otro extremo del mundo. FOSTeleportTrigger comprueba player.isLocal antes que nada.

Si el destino de A queda dentro del volumen de B y viceversa, el jugador va y viene sin fin. El cooldown limita los daños, pero la solución real es colocar el punto de llegada fuera del volumen del teletransportador de enfrente.

El bloqueo del cooldown se activa antes del desplazamiento: teletransportarse hace que el jugador salga y entre en volúmenes, y esos eventos pueden volver en el mismo fotograma.


Un disparador nuevo no es más que una clase que deriva de FOSTeleporterBase y llama a TeleportLocalPlayer():

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

Recuerda: el nombre de la clase debe coincidir exactamente con el del archivo .cs, y el program asset se crea solo la próxima vez que cargue el editor.