Teleport System #
- Overview
- Core Concepts
- What is the Teleport System?
- Use Cases
- Level Streaming Support
- Components
- Teleport Location Actor
- Teleport Component (Player Controller)
- Teleport Interface
- Setting Up Teleport System
- Placing Teleport Locations
- Adding Teleport Component
- Configuring Fade Widgets
- Teleport Location Actor
- Persistent Level Requirement
- Teleport Interface Implementation
- Teleport Validation Checks
- Teleportation Process
- Teleport Flow Overview
- Fade-In Phase
- Level Loading Phase
- Movement Freeze
- Fade-Out Phase
- Teleport Validation
- Can Teleport Interface Function
- Common Validation Checks
- Custom Validation Logic
- Integration with Other Systems
- Fast Travel System
- Quest System
- Save/Load System
- Example Implementations
- Basic Teleport Points
- Fast Travel System
- Dungeon Exit Portals
- How To Guides
- Setting Up Basic Teleportation
- Creating Fast Travel Points
- Adding Custom Validation
- OVERVIEW
The Teleport System is a robust teleportation solution that supports level streaming, enabling players to teleport to unloaded areas safely and seamlessly.
Core Features:
- Teleport to unloaded areas (World Partition/Level Streaming support)
- Automatic level loading before teleportation
- Player movement freeze during loading
- Optional fade-in/fade-out transitions
- Validation interface for teleport conditions
- Always-loaded teleport location references (persistent level)
- Safe teleportation with loading guarantees

Common Applications:
- Fast travel systems
- Dungeon entrances/exits
- Portals between areas
- Waypoint systems
- Level transitions
- Respawn points
- Quest teleportation
Why This System?
Standard teleportation breaks when teleporting to unloaded levels. This system:
- Ensures level is loaded before teleporting
- Freezes player movement during loading
- Provides visual feedback with fade transitions
- Validates teleport conditions before initiating
- Maintains references to teleport locations in persistent level
Core concepts #
What is the Teleport System? #
The Teleport System manages safe player teleportation, especially to areas that may not be loaded.
Two Main Components:
- Teleport Location Actor (placed in persistent level):
- Marks valid teleport destinations
- Always loaded and accessible
- Implements validation interface
- Stores location and associated level
- Teleport Component (on Player Controller):
- Initiates teleportation
- Handles fade transitions
- Manages level loading
- Freezes/unfreezes player movement
The Problem This Solves:
Standard Teleportation:
- Call “Teleport to Location”
- If level not loaded → Player falls through world or crashes
- No visual feedback during transition
- Movement enabled immediately (can fall/die during loading)
Teleport System Solution:
- Check if can teleport (validation)
- Start fade-in transition
- Freeze player movement
- Teleport to location
- Wait for level to load
- Once loaded, unfreeze movement
- Start fade-out transition
- Player can move in fully loaded level
Use Cases #
The Teleport System can be used in various gameplay scenarios:
Common Applications:
- Fast Travel System: Teleport to discovered landmarks
- Dungeon Entrances/Exits: Transition between overworld and dungeons
- Portal System: Interactive portals between distant locations
- Quest Teleportation: Move players to quest objectives
- Respawn System: Teleport to respawn points on death
- Waypoint System: Player-placed or predefined waypoints
- Cutscene Transitions: Move players for story sequences
The system handles level streaming and validation automatically for all these use cases.
Level Streaming Support #
The Teleport System is designed to work with World Partition and Level Streaming.
The Challenge:
In open world games with level streaming:
- Not all areas are loaded simultaneously
- Teleporting to unloaded area causes errors
- Need to ensure target location is loaded before teleporting
The Solution:
Teleportation Flow with Level Streaming:
- Player initiates teleport to Location A
- Teleport Component checks if Location A's level is loaded
- If not loaded:
- Start loading level
- Freeze player movement
- Show fade-in effect
- Teleport player to location (while still frozen)
- Wait for level to finish loading
- Once level loaded:
- Unfreeze player movement
- Show fade-out effect
- Player can now move in fully loaded area
Why Teleport First, Then Wait?
The player is teleported to the location immediately, but movement is frozen:
- Player is at correct location for level streaming
- Level streaming system knows what to load (area around player)
- Player can't fall or move during loading
- Once loaded, fade-out reveals fully loaded environment
Persistent Level Requirement:
Teleport Location actors must be in persistent level because:
- Persistent level is always loaded
- Teleport locations are always accessible as references
- Can query teleport locations without loading their target levels
- Ensures reliable references throughout game session

Components #
Teleport Location Actor #
BP_TeleportLocation (or similar) marks a valid teleport destination.
Must Be Placed in Persistent Level:
- Persistent level is always loaded
- Guarantees teleport location reference is always valid
- Can be queried from anywhere without loading levels
Key Properties:
- Location: Transform where player will be teleported
- Associated Level: Which streaming level or world partition area this location is in
- Display Name: Name for UI (e.g., “Town Square”, “Dark Forest”)
- Teleport Icon: Icon for fast travel UI
- Validation Settings: Requirements for teleportation
Interface Implementation:
Implements BPI_Teleport interface with:
- Can Teleport: Returns true/false if teleportation is allowed
- Get Teleport Transform: Returns target location and rotation
- On Teleport Complete: Called when player successfully teleports

Visual Representation:
In editor, shows:
- Teleport destination marker
- Arrow indicating player forward direction
- Debug name text
- Associated level information
Teleport Component (Player Controller) #
Teleport Component (on Player Controller) handles the teleportation process.
Component Location:
Add to BP_PlayerController to give player teleportation capability.
Key Functions:
- Teleport To Location: Initiates teleportation to specific teleport location
- Start Fade In: Begins fade-in transition
- Start Fade Out: Begins fade-out transition
- Freeze Player Movement: Disables player input and movement
- Unfreeze Player Movement: Re-enables player input and movement
Configuration:
- Fade Widget Class: Optional widget for fade-in/fade-out effects
- Fade Duration: How long fade transitions take
- Use Fade Effects: Enable/disable fade transitions
- Level Loading Timeout: Maximum wait time for level loading
State Tracking:
- Is Currently Teleporting (boolean)
- Current Fade Phase (None, Fading In, Waiting For Load, Fading Out)
- Target Teleport Location (reference)
Teleport Interface #
BPI_Teleport interface defines functions for teleport validation and callbacks.
Interface Functions:
Can Teleport:
Function: Can Teleport
Inputs: Player Controller (who is teleporting)
Outputs: Boolean (can teleport?), String (failure reason)
Purpose: Validate if teleportation to this location is allowed
Get Teleport Transform:
Function: Get Teleport Transform
Inputs: None
Outputs: Transform (location and rotation)
Purpose: Get exact location and rotation for player teleportation
On Teleport Complete:
Function: On Teleport Complete
Inputs: Player Controller (who teleported)
Outputs: None
Purpose: Callback when player successfully teleports to this location
Implementing the Interface:
Teleport Location actors implement this interface to:
- Define validation logic (Can Teleport)
- Specify teleport destination (Get Teleport Transform)
- React to successful teleportation (On Teleport Complete)
Can Teleport:
- Check if player has discovered this location
- Check if location is unlocked
- Check if location is occupied
- Check if player has required items
- Return true if all checks pass, false otherwise
Setting up teleport system #
Placing Teleport Locations #
Teleport locations must be placed in the persistent level.
Setup Steps:
Step 1: Ensure Persistent Level Exists #
- In World Settings, verify persistent level setup
- For World Partition projects, persistent level is default level
- For Level Streaming projects, ensure you have a persistent level
Step 2: Place Teleport Location Actor #
- Open persistent level
- Place BP_TeleportLocation in world
- Position at desired teleport destination
- Rotate arrow to face desired player forward direction
Step 3: Configure Teleport Location #
- Select teleport location actor
- Set Display Name (e.g., “Town Square”)
- Set Associated Level (which streaming level this is in)
- Configure validation settings (if needed)
- Set icon for UI (if using fast travel)
Step 4: Test Reference #
- In another blueprint, try to get reference to teleport location
- Verify reference is valid even when level not loaded
- Confirms persistent level placement is correct
Adding Teleport Component #
Add the Teleport Component to the Player Controller.
Setup Steps:
Step 1: Open Player Controller #
- Open BP_PlayerController
- Go to Components panel
Step 2: Add Teleport Component #
- Click Add Component
- Search for “Teleport Component”
- Add to Player Controller
Step 3: Configure Component #
- Select Teleport Component
- Set Fade Widget Class (or leave None for no fade)
- Set Fade Duration (default: 1.0 seconds)
- Set Use Fade Effects (true/false)
- Set Level Loading Timeout (default: 30 seconds)
Step 4: Test Teleportation #
- Create test event (e.g., on key press)
- Call Teleport To Location with reference to teleport location
- Test in-game
- Verify fade, loading, and teleportation work correctly
Teleport location actor #
Persistent Level Requirement #
Teleport Location actors must always be in the persistent level.
Why Persistent Level?
Problem with Streaming Levels:
Scenario: Teleport location in Streaming Level A
- Player is in Level B
- Level A is unloaded (to save memory)
- Player tries to access fast travel menu
- Fast travel menu needs list of teleport locations
- Teleport location reference is INVALID (level not loaded)
- Fast travel menu breaks or shows missing locations
Solution with Persistent Level:
Scenario: Teleport location in Persistent Level
- Player is in Level B
- Level A is unloaded
- Player opens fast travel menu
- Fast travel menu queries teleport locations
- Teleport location reference is VALID (persistent level always loaded)
- Fast travel menu shows all locations
- Player selects location in Level A
- Teleport system loads Level A and teleports player
How to Verify Persistent Level Placement:
- Select teleport location actor
- Check Levels window
- Verify actor is in persistent level (usually bolded or marked)
- If in streaming level, move to persistent level
Data vs Actor Placement:
- Teleport Location Actor: In persistent level (always loaded)
- Target Location: Can be in any streaming level
- Associated Level: Property that stores which streaming level the target is in
This separation ensures references work while supporting any level layout.
Teleport Interface Implementation #
Teleport Location actors implement BPI_Teleport interface for validation and callbacks.
Can Teleport Function:
Default implementation:
Can Teleport (Player Controller):
- Return true (always allow teleportation)
- Return empty string (no failure reason)
Custom implementations can add checks:
Can Teleport (Player Controller):
- Check if player has discovered this location:
- Get save game
- Check if location is in discovered locations list
- If not discovered, return false, "Location not discovered"
- Check if location is unlocked:
- Check quest flags or conditions
- If locked, return false, "Location locked"
- Check if location is occupied:
- Get all characters at location
- If location occupied by enemy, return false, "Location occupied"
- All checks passed:
- Return true, ""
Get Teleport Transform Function:
Returns where player should be teleported:
Get Teleport Transform:
- Get actor transform (location and rotation)
- Return transform
Can be customized:
Get Teleport Transform:
- Check for open spawn point (if multiple spawn points)
- Return first available spawn point transform
- Or return specific location based on conditions
On Teleport Complete Function:
Called after successful teleportation:
On Teleport Complete (Player Controller):
- Mark location as discovered (if not already)
- Trigger events (achievements, analytics, etc.)
- Play arrival effects (particles, sounds)
- Update quest state
- Save game
Teleport Validation Checks #
Common validation checks implemented in Can Teleport function.
Discovery Check (Fast Travel):
Has Player Discovered Location?
- Get save game component
- Check discovered locations array
- If location ID is in array:
- Return true (discovered)
- If not:
- Return false, "You haven't discovered this location yet"
Unlock Check (Quest/Progression):
Is Location Unlocked?
- Get quest system
- Check if required quest is complete
- Or check if player has required item
- If unlocked:
- Return true
- If locked:
- Return false, "Complete [Quest Name] to unlock this location"
Occupation Check (Safety):
Is Location Safe?
- Get all actors in radius of teleport location
- For each actor:
- Is actor hostile enemy?
- Is affiliated check (if using Team Affiliation System)
- If hostile enemies present:
- Return false, "Location is occupied by enemies"
- If safe:
- Return true
Cooldown Check (Game Balance):
Is Teleport On Cooldown?
- Get last teleport time from player data
- Calculate time since last teleport
- If time < cooldown duration:
- Return false, "Fast travel is on cooldown"
- If cooldown expired:
- Return true
Resource Check (Cost):
Does Player Have Resources?
- Trigger Event Manager “Has Item” (if using Event Manager)
- Check if player has required gold/items
- If has resources:
- Return true
- If insufficient resources:
- Return false, "Insufficient gold for fast travel"
Combining Multiple Checks:
Can Teleport:
- Discovery Check → If false, return false
- Unlock Check → If false, return false
- Occupation Check → If false, return false
- Cooldown Check → If false, return false
- Resource Check → If false, return false
- All checks passed → Return true
Each check provides specific failure reason for UI feedback.
Teleportation process #
Teleport Flow Overview #
Complete flow of teleportation from initiation to completion.
Full Teleportation Sequence:
- Initiation:
- Player triggers teleport (UI button, portal interaction, etc.)
- Call "Teleport To Location" on Teleport Component
- Pass reference to Teleport Location actor
- Validation:
- Call "Can Teleport" on Teleport Location (via interface)
- If false, show error message and cancel
- If true, proceed
- Fade-In Phase:
- Create fade widget (if configured)
- Call "Play Fade In" on widget
- Wait for fade-in animation to complete
- Movement Freeze:
- Disable player input
- Disable character movement
- Player cannot move or act
- Teleportation:
- Teleport player character to teleport location transform
- Player is now at destination (but frozen)
- Level Loading Phase:
- Check if target level is loaded
- If not loaded, trigger level loading
- Wait for level to fully load
- Player remains frozen during loading
- Level Loaded:
- Level is fully loaded and streamed in
- Environment is ready for gameplay
- Fade-Out Phase:
- Call "Play Fade Out" on widget
- Wait for fade-out animation to complete
- Movement Unfreeze:
- Re-enable player input
- Re-enable character movement
- Player can now move and act
- Completion:
- Call "On Teleport Complete" on Teleport Location (via interface)
- Remove fade widget
- Teleportation complete
Why This Order?
Teleport first, then wait for loading:
- Player position determines what level streaming system loads
- Player is at correct location for streaming priority
- Frozen state prevents falling through unloaded geometry
- Fade-out only happens when environment is fully loaded and ready
Fade-In Phase #
Visual transition before teleportation begins.
Fade-In Process:
- Check if fade effects are enabled
- If enabled:
- Create fade widget instance
- Add to viewport
- Call "Play Fade In" event on widget
- Wait for fade duration (e.g., 1 second)
- If disabled:
- Skip fade-in phase
Fade-In Widget Animation:
Start: Opacity 0 (transparent, can see world)
↓
Animate over 1 second
↓
End: Opacity 1 (solid black, world hidden)
Purpose:
- Hide the moment of teleportation
- Provide visual feedback that something is happening
- Smooth transition between areas
- Professional presentation
Custom Fade Effects:
You can customize fade widget to:
- Use custom colors or images
- Add loading spinner
- Show location name text
- Play sound effects
- Animate additional elements
Level Loading Phase #
Ensures target level is loaded before revealing environment.
Level Loading Process:
- Player is teleported to destination (but frozen)
- Get target level from Teleport Location (Associated Level property)
- Check if level is loaded:
- Use "Is Level Loaded" function
- Check World Partition streaming state
- If level not loaded:
- Trigger level load:
- Call "Load Stream Level" (for level streaming)
- Or rely on World Partition streaming (for World Partition)
- Start loading timer
- Wait for level to load:
- Check every tick if level is loaded
- Or use level streaming delegates
- Once loaded:
- Proceed to fade-out phase
- If timeout reached (e.g., 30 seconds):
- Cancel teleport
- Unfreeze player
- Show error message
- Teleport player back to origin (optional)
Loading Indicators:
While waiting for level load:
- Fade widget is still solid (hiding world)
- Optional loading spinner can be shown
- Optional loading text: “Loading area…”
- Player is frozen at destination
World Partition vs Level Streaming:
World Partition:
- Teleport player to location
- World Partition automatically streams cells around player
- Wait for streaming to complete
- More automatic handling
Level Streaming:
- Explicitly load target streaming level
- Wait for “On Level Loaded” delegate
- More manual control
Both are supported by the teleport system.
Movement Freeze #
Player movement and input are frozen during teleportation and loading.
Freeze Process:
Freeze Player Movement:
- Get player character
- Disable input:
- Disable Player Input(Player Controller)
- Disable movement:
- Set Character Movement to "Flying" mode (to prevent falling)
- Or disable movement component entirely
- Set flag: Is Currently Teleporting = true
- Optional: Hide player character mesh (immersion)
Why Freeze Movement?
Critical for safety:
- Prevents falling: If level isn't loaded, geometry doesn't exist
- Prevents movement during loading: Player can't walk off edges during streaming
- Prevents input spam: Player can't cancel teleport or trigger other actions
- Professional presentation: Smooth transition without player interference
Freeze Duration:
Freeze starts: Before teleportation
↓
During teleportation
↓
During level loading (can be several seconds)
↓
Freeze ends: After fade-out completes and level fully loaded
Unfreeze Process:
Unfreeze Player Movement:
- Get player character
- Enable input:
- Enable Player Input(Player Controller)
- Enable movement:
- Set Character Movement to "Walking" mode
- Or re-enable movement component
- Set flag: Is Currently Teleporting = false
- Optional: Show player character mesh
Fade-Out Phase #
Visual transition after level is loaded, revealing new environment.
Teleport validation #
Can Teleport Interface Function #
The Can Teleport function determines if teleportation is allowed.
Function Details:
Interface: BPI_Teleport
Function: Can Teleport
Inputs:
- Player Controller (Actor): Who is trying to teleport
Outputs:
- Can Teleport (Boolean): true if allowed, false if not
- Failure Reason (String): If false, why teleportation is not allowed
Implementation in Teleport Location:
Basic implementation (always allow):
Can Teleport:
- Return true
- Return “” (empty failure reason)
Advanced implementation (with checks):
Can Teleport:
- Run validation checks (discovery, unlock, occupation, etc.)
- If any check fails:
- Return false
- Return specific failure reason ("Location not discovered", etc.)
- If all checks pass:
- Return true
- Return "" (empty string)
Usage in Teleport System:
Teleport To Location (Teleport Location):
- Call “Can Teleport” on Teleport Location via interface
- Pass Player Controller reference
- Receive boolean and failure reason
- If false:
- Show error message to player (use failure reason)
- Cancel teleportation
- Return
- If true:
- Proceed with teleportation
Common Validation Checks #
Typical checks implemented in Can Teleport function.
Fast Travel Discovery:
Check Discovery:
- Get player save data
- Check “Discovered Locations” array
- If location ID is in array:
- Pass check
- If not in array:
- Fail: "You haven't discovered this location yet"
Usage: Prevent teleporting to undiscovered locations
Quest Unlock:
Check Quest Unlock:
- Get quest system
- Check if required quest is complete
- If quest complete:
- Pass check
- If quest not complete:
- Fail: "Complete [Quest Name] to unlock"
Usage: Gate teleport locations behind quest progression
Enemy Occupation:
Check Occupation:
- Overlap sphere at teleport location
- Get all overlapping characters
- For each character:
- Check if enemy (using Team Affiliation System)
- If enemy found:
- Fail: "Location occupied by enemies"
- If no enemies:
- Pass check
Usage: Prevent teleporting into danger
Level Requirement:
Check Level:
- Get player level from Attribute Manager
- Compare to required level for this location
- If player level >= required level:
- Pass check
- If player level < required level:
- Fail: "Requires level [X]"
Usage: Gate high-level areas
Item Requirement:
Check Item:
- Trigger Event Manager “Has Item” (or direct inventory check)
- Check if player has required item (key, pass, etc.)
- If has item:
- Pass check
- If doesn't have item:
- Fail: "Requires [Item Name]"
Usage: Require specific items for access
Custom Validation Logic #
You can implement any custom logic in Can Teleport.
Can Teleport:
- Get current in-game time
- If location is “Night Market”:
- If time is between 18:00 and 06:00 (night):
- Pass check
- If time is daytime:
- Fail: "The Night Market is only accessible at night"
- Proceed with other checks
Can Teleport:
- Get current weather
- If location is “Mountain Peak”:
- If weather is "Blizzard":
- Fail: "Cannot teleport during blizzard conditions"
- If weather is safe:
- Pass check
Can Teleport:
- Get player reputation with faction
- If location is “Empire Capital”:
- If reputation with Empire < 0 (hostile):
- Fail: "The Empire has banished you from the capital"
- If reputation >= 0:
- Pass check
Can Teleport:
- Get number of players in party
- If location is “Solo Dungeon”:
- If party size > 1:
- Fail: "This dungeon is for solo players only"
- If party size = 1:
- Pass check
Can Teleport:
- Check if player is in combat
- If in combat:
- Fail: "Cannot fast travel while in combat"
- If not in combat:
- Pass check
Best Practices:
- Provide clear, specific failure reasons
- Check multiple conditions in priority order
- Return as soon as first check fails (early exit)
- Consider player experience (don't make restrictions frustrating)
- Test edge cases
Integration with other systems #
The Teleport System can integrate with other gameplay systems through the validation interface and callbacks.
Fast Travel System:
Use the Teleport System as the foundation for fast travel. Query all Teleport Location actors, check availability with “Can Teleport”, and display discovered locations in a UI menu.
Quest System:
Quest objectives can reference Teleport Locations to move players to quest areas. Use “Can Teleport” to validate quest state before teleporting.
Save/Load System:
Store discovered location IDs in save data. On load, restore discovered state and optionally teleport player to last known location or respawn point.
Event Manager:
Trigger events on teleport completion (location discovered, achievement unlocked, etc.) and use Event Manager for cost validation (gold, items, etc.).
Attribute Manager:
Validate player level or other attributes in “Can Teleport” function to gate high-level areas.
The validation interface and callbacks provide integration points for any custom system.
Example implementations #
The Teleport System can be implemented in various ways depending on your game's needs.
Basic Teleport Points:
Create portal actors with trigger volumes that reference Teleport Location actors. When the player overlaps the trigger, call “Teleport To Location” on the Player Controller's Teleport Component. This works for dungeon entrances, area transitions, or any two-way portal system.
Fast Travel System:
Build a UI menu that queries all Teleport Location actors and displays discovered locations to the player. Use the “Can Teleport” interface function to validate discovery status and other requirements. You can implement discovery triggers at landmarks and store discovered location IDs in save data.
Dungeon Exit Portals:
Create exit portals that teleport players back to the overworld. You can store the player's entry point in player data to teleport them back to where they entered, or use fixed teleport locations for consistent exits.
How to guides #
Setting Up Basic Teleportation #
Step-by-step guide to set up basic teleportation between two locations.
Step 1: Add Teleport Component to Player Controller #
- Open BP_PlayerController
- Add Teleport Component
- Configure:
- Fade Widget Class: WBP_TeleportFade (or None)
- Fade Duration: 1.0
- Use Fade Effects: True
Step 2: Create Teleport Location Actors #
- Open Persistent Level (critical!)
- Place BP_TeleportLocation at Location A
- Configure Location A:
- Display Name: “Town Square”
- Associated Level: “Town_Level
- Place BP_TeleportLocation at Location B
- Configure Location B:
- Display Name: “Forest Camp”
- Associated Level: “Forest_Level
Step 3: Create Portal/Trigger #
- Create or open portal blueprint (e.g., BP_TeleportPortal)
- Add trigger volume (sphere, box, etc.)
- Add reference to target Teleport Location:
- Variable: Target Location (Teleport Location reference)
- Make Instance Editable
Step 4: Implement Teleport Logic #
BP_TeleportPortal – Event Graph:
On Component Begin Overlap:
- Check if overlapping actor is player character
- If yes:
- Get Player Controller from player character
- Get Teleport Component from Player Controller
- Call "Teleport To Location" (Target Location)
Step 5: Place Portals and Set References #
- Place portal in Town_Level
- Set Target Location to Location B (Forest Camp)
- Place return portal in Forest_Level
- Set Target Location to Location A (Town Square)
Step 6: Test #
- Play game
- Walk into portal in town
- Verify:
- Fade-in effect plays
- Player teleports to forest
- Forest level loads (if not already loaded)
- Fade-out reveals forest
- Player can move
- Walk into return portal
- Verify return teleport works
Troubleshooting:
- If reference is invalid: Check that Teleport Locations are in persistent level
- If level doesn't load: Check Associated Level property is set correctly
- If player falls: Verify level loading wait is working
Best Practices:
- Check conditions in priority order (most restrictive first)
- Provide clear, helpful failure messages
- Test each check individually
- Consider edge cases
- Balance gameplay vs player convenience
- —
END OF DOCUMENTATION
- Level Streaming Documentation
- World Partition Documentation
- Event Manager Documentation (for integration)
- Quest System Documentation (for quest-based teleportation)
- Save/Load System Documentation (for discovery persistence)
