Reference Devices compiles

teleporter_device: Instant Travel Between Any Two Points

The `teleporter_device` is your go-to tool whenever a player needs to move instantly from one location to another — whether that's a vault entrance, a boss arena, or a multi-stage escape room. It exposes both push-style methods (`Teleport`, `Activate`) and reactive events (`EnterEvent`, `TeleportedEvent`) so you can wire teleportation into any game loop. This article walks you through every method and event with real, compilable Verse code.

Updated Examples verified on the live UEFN compiler
Watch the Knotteleporter_device in ~90 seconds.

Overview

A teleporter_device is a customizable rift placed in your UEFN level that moves an agent from one location to another the moment they step in — or the moment your Verse code tells it to. You can:

  • React when a player walks into a teleporter (EnterEvent) or pops out the other side (TeleportedEvent).
  • Push a specific player through programmatically with Teleport(Agent) or Activate(Agent).
  • Enable / Disable the rift on the fly (lock a teleporter until a puzzle is solved).
  • Manage linked return trips with ActivateLinkToTarget, DeactivateLinkToTarget, and ResetLinkToTarget — essential for two-way portals and teleporter groups.

Reach for teleporter_device any time you need instant positional travel: escape rooms, boss-arena transitions, multi-floor buildings, or cinematic sequences that end with the player appearing somewhere new.

API Reference

teleporter_device

Customizable rift that allows agents to move instantly between locations. You can use this to move players around your island, or create multi-island experiences with teleporters that take players from one island to another.

Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).

teleporter_device<public> := class<concrete><final>(creative_device_base):

Events (subscribe a handler to react):

Event Signature Description
EnterEvent EnterEvent<public>:listenable(agent) Signaled when an agent enters this device. Sends the agent that entered this device.
TeleportedEvent TeleportedEvent<public>:listenable(agent) Signaled when an agent emerges from this device. Sends the agent that emerged from this device.

Methods (call these to make the device act):

Method Signature Description
Enable Enable<public>():void Enables this device.
Disable Disable<public>():void Disables this device.
Activate Activate<public>(Agent:agent):void Teleport Agent to the target group using this device.
ActivateLinkToTarget ActivateLinkToTarget<public>():void When a link is activated, the current destination teleporter will be able to bring the agent back to this origin teleporter. Both origin and destination teleporters need to have this activated to work as expected.
DeactivateLinkToTarget DeactivateLinkToTarget<public>():void Deactivates any currently active Link. The current destination teleporter will no longer be able to return the agent to this origin teleporter.
ResetLinkToTarget ResetLinkToTarget<public>():void Resets the currently selected destination teleporter, and selects an eligible destination. If the target is a Teleporter Group, this may be another randomly chosen teleporter_device from that group.
Teleport Teleport<public>(Agent:agent):void Teleport Agent to this device.

Walkthrough

Scenario: A Locked Vault Door That Opens After a Puzzle

Imagine a heist map. Players start in a lobby. When they collect a key item and step on a pressure plate (trigger), the vault teleporter activates and whisks them into the vault. Once they arrive, the return teleporter's link is activated so they can come back. If they somehow trigger the plate again, ResetLinkToTarget picks a fresh destination from the teleporter group.

This single device wires together Enable, Disable, Teleport, ActivateLinkToTarget, ResetLinkToTarget, EnterEvent, and TeleportedEvent.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Playspaces }
using { /UnrealEngine.com/Temporary/Diagnostics }

# Log channel for vault teleporter debug output
vault_log := class(log_channel){}

# Place this device in the level, then assign the editable fields in UEFN.
vault_teleporter_manager := class(creative_device):

    # The teleporter players step into to enter the vault
    @editable
    VaultEntrance : teleporter_device = teleporter_device{}

    # The teleporter inside the vault that returns players to the lobby
    @editable
    VaultExit : teleporter_device = teleporter_device{}

    # A trigger_device the player activates to unlock the vault
    @editable
    PuzzlePlate : trigger_device = trigger_device{}

    # Vault starts locked
    OnBegin<override>()<suspends> : void =
        # Disable the entrance rift until the puzzle is solved
        VaultEntrance.Disable()

        # Subscribe to the puzzle plate — when triggered, unlock the vault
        PuzzlePlate.TriggeredEvent.Subscribe(OnPuzzleSolved)

        # React when a player enters the entrance rift
        VaultEntrance.EnterEvent.Subscribe(OnPlayerEntersVault)

        # React when a player emerges from the exit rift
        VaultExit.TeleportedEvent.Subscribe(OnPlayerExitsVault)

    # Called when the pressure plate fires (handler receives ?agent)
    OnPuzzleSolved(Instigator : ?agent) : void =
        Log("Puzzle solved — vault entrance unlocked!", ?Channel := vault_log)
        VaultEntrance.Enable()

        # Activate the two-way link so VaultExit can return players to VaultEntrance
        VaultEntrance.ActivateLinkToTarget()
        VaultExit.ActivateLinkToTarget()

    # EnterEvent fires BEFORE the player is moved; Agent is a plain agent here
    OnPlayerEntersVault(Agent : agent) : void =
        Log("A player is entering the vault rift!", ?Channel := vault_log)
        # After the puzzle is solved the rift handles movement automatically;
        # you could also call VaultEntrance.Activate(Agent) to force it.

    # TeleportedEvent fires AFTER the player emerges from VaultExit
    OnPlayerExitsVault(Agent : agent) : void =
        Log("A player has left the vault.", ?Channel := vault_log)
        # Pick a new random destination from the teleporter group for variety
        VaultExit.ResetLinkToTarget()
        # Re-lock the entrance so the next puzzle run starts fresh
        VaultEntrance.Disable()
        VaultEntrance.DeactivateLinkToTarget()
        VaultExit.DeactivateLinkToTarget()

Line-by-line breakdown

Line / block What it does
VaultEntrance.Disable() Hides/deactivates the rift at game start so players can't skip the puzzle.
PuzzlePlate.TriggeredEvent.Subscribe(OnPuzzleSolved) Wires the pressure plate to our unlock handler.
VaultEntrance.EnterEvent.Subscribe(OnPlayerEntersVault) Fires the moment a player steps into the rift (before teleport).
VaultExit.TeleportedEvent.Subscribe(OnPlayerExitsVault) Fires the moment a player emerges from the exit rift.
VaultEntrance.Enable() Re-activates the rift after the puzzle is solved.
ActivateLinkToTarget() on both Enables the two-way return trip between entrance and exit.
VaultExit.ResetLinkToTarget() Picks a fresh eligible destination — useful when VaultExit belongs to a teleporter group with multiple possible lobbies.
DeactivateLinkToTarget() on both Tears down the return link so the next run starts clean.

Common patterns

Pattern 1 — Teleport all players to a boss arena on round start

Use Teleport(Agent) to push every player through a specific teleporter regardless of where they are standing.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Playspaces }

# Teleports every player to the boss arena when a button is pressed.
boss_arena_starter := class(creative_device):

    # Drop this teleporter inside the boss arena
    @editable
    ArenaEntrance : teleporter_device = teleporter_device{}

    # A button_device the host presses to start the boss round
    @editable
    StartButton : button_device = button_device{}

    OnBegin<override>()<suspends> : void =
        StartButton.InteractedWithEvent.Subscribe(OnStartPressed)

    OnStartPressed(Agent : agent) : void =
        # Pull every player on the island into the arena
        AllPlayers := GetPlayspace().GetPlayers()
        for (P : AllPlayers):
            ArenaEntrance.Teleport(P)

Key point: Teleport(Agent) sends the agent to this device's location. Place ArenaEntrance inside the arena and every player lands there instantly.


Pattern 2 — Activate a teleporter group for a random destination

Activate(Agent) sends the agent to the target group configured in the device's settings panel — great for randomized map sections.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Playspaces }

# When a player steps on a trigger, send them to a random zone via Activate.
random_zone_sender := class(creative_device):

    # This teleporter's Target Group is set to a group of zone teleporters in UEFN
    @editable
    RandomDispatcher : teleporter_device = teleporter_device{}

    # Trigger the player walks over
    @editable
    ZonePlate : trigger_device = trigger_device{}

    OnBegin<override>()<suspends> : void =
        ZonePlate.TriggeredEvent.Subscribe(OnZonePlateTriggered)

    OnZonePlateTriggered(MaybeAgent : ?agent) : void =
        # Unwrap the optional agent before using it
        if (A := MaybeAgent?):
            # Activate sends A to whichever teleporter in the group is selected
            RandomDispatcher.Activate(A)
            # Shuffle the destination for the next player
            RandomDispatcher.ResetLinkToTarget()

Key point: Activate respects the device's Target Group setting. ResetLinkToTarget re-rolls the group selection so each player can land somewhere different.


Pattern 3 — Enable / Disable a teleporter based on a team score

Toggle the rift open or shut in response to game events without touching the player at all.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }

# Locks or unlocks a teleporter based on which team controls a capture zone.
capture_zone_gatekeeper := class(creative_device):

    # The rift that leads to the winning team's reward room
    @editable
    RewardTeleporter : teleporter_device = teleporter_device{}

    # A capture area device that signals when Team 1 takes control
    @editable
    CaptureZone : capture_area_device = capture_area_device{}

    OnBegin<override>()<suspends> : void =
        # Start locked — no team controls the zone yet
        RewardTeleporter.Disable()

        CaptureZone.TeamAFullyCapturedEvent.Subscribe(OnTeamCaptured)
        CaptureZone.TeamALostCaptureEvent.Subscribe(OnTeamLostCapture)

    OnTeamCaptured(Index : int) : void =
        # Team 1 now controls the zone — open the reward rift
        RewardTeleporter.Enable()

    OnTeamLostCapture(Index : int) : void =
        # Team 1 lost control — seal the rift again
        RewardTeleporter.Disable()

Key point: Enable / Disable are instant and affect all players simultaneously — no per-agent logic needed.


Gotchas

1. EnterEvent vs TeleportedEvent — timing matters

EnterEvent fires before the player is moved. TeleportedEvent fires after they emerge at the destination. If you need to grant a weapon or play a sound at the destination, subscribe to TeleportedEvent, not EnterEvent.

2. Teleport vs Activate — direction matters

  • Teleport(Agent) moves the agent to this device (the one you call it on).
  • Activate(Agent) moves the agent from this device to its configured target group.

Mixing these up is the single most common bug with teleporters.

The docs are explicit: both the origin and destination teleporter must call ActivateLinkToTarget() for a return trip to work. Calling it on only one side silently does nothing.

4. trigger_device.TriggeredEvent sends ?agent, not agent

When you chain a trigger to a teleporter, the trigger handler receives (?agent). You must unwrap it before passing to Teleport or Activate:

OnPlateTriggered(MaybeAgent : ?agent) : void =
    if (A := MaybeAgent?):
        MyTeleporter.Teleport(A)

Forgetting the unwrap is a compile error.

5. @editable is mandatory

You cannot write teleporter_device{}.Teleport(Agent) inline — the runtime device only exists when it is declared as an @editable field and wired in the UEFN editor. A bare literal teleporter_device{} is a default-constructed stub with no placed actor behind it.

6. ResetLinkToTarget is non-deterministic in groups

If your teleporter's target is a Teleporter Group, ResetLinkToTarget picks a random eligible member. Do not rely on it selecting a specific destination — use a dedicated teleporter_device reference and call Teleport directly if you need a guaranteed target.

Device Settings & Options

The teleporter_device User Options panel in the UEFN editor — every setting you can tune.

Teleporter Device settings and options panel in the UEFN editor — Teleporter Group, Teleporter Target Group, Teleporter Rift Visible, Play Visual Effects
Teleporter Device — User Options in the UEFN editor: Teleporter Group, Teleporter Target Group, Teleporter Rift Visible, Play Visual Effects
⚙️ Settings on this device (4)

Setting names read from the panel above — may be partial; the screenshots are the source of truth.

Teleporter Group
Teleporter Target Group
Teleporter Rift Visible
Play Visual Effects

Guides & scripts that use teleporter_device

Step-by-step tutorials that put this object to work.

Build your own lesson with teleporter_device

Generate a personalized, step-by-step lesson plan built around this object — grounded in this exact reference and our compile-verified knowledge base.

Build a lesson →