Reference Devices compiles

billboard_device: Dynamic In-World Text Displays

The `billboard_device` lets you display custom text messages directly in your Fortnite island — think countdown warnings, objective labels, score readouts, or flavor text that reacts to game events. Unlike static text placed in the editor, Verse gives you full runtime control: swap the message, resize it, toggle the border frame, and show or hide the whole sign on demand.

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

Overview

The billboard_device is a placeable Creative device that renders a text panel in 3D world space. Players see it like a sign — floating above a capture point, mounted on a wall, or hovering near a chest. Its real power comes from Verse: you can change what it says, how big the text is, whether the physical border frame is visible, and whether the text is shown at all — all at runtime in response to game events.

When to reach for it:

  • Displaying a live objective label ("Defend the Vault") that updates when the objective changes.
  • Showing a countdown message that appears when a timer starts and disappears when it ends.
  • Giving players contextual hints near interactables ("Press here to unlock").
  • Hiding flavor text until a trigger fires, then revealing it dramatically.

API Reference

billboard_device

Used to display custom text messages on a billboard.

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

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

Methods (call these to make the device act):

Method Signature Description
ShowText ShowText<public>():void Shows the billboard text.
HideText HideText<public>():void Hides the billboard text.
UpdateDisplay UpdateDisplay<public>():void Updates the device display to show the current Text.
SetShowBorder SetShowBorder<public>(Show:logic):void Sets the visibility of the device border mesh. This also determines whether the device collision is enabled.
GetShowBorder GetShowBorder<public>()<transacts>:logic Returns true if the device border is enabled.
SetText SetText<public>(Text:message):void Sets the device Text.
SetTextSize SetTextSize<public>(Size:int):void Sets the Text Size of the device Text. Clamped to range [8, 24].
GetTextSize GetTextSize<public>()<transacts>:int Returns the Text Size of the device Text.

Walkthrough

Scenario: A vault door puzzle. When a player steps on a pressure plate, a billboard near the vault first shows a warning message in large text with a visible border. After a short delay it swaps to a "VAULT OPEN" message in smaller text and hides the border frame — signaling the door is now unlocked.

This example uses SetText, SetTextSize, UpdateDisplay, ShowText, SetShowBorder, HideText, and GetTextSize across the full flow.

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

# Localizer helper — billboard_device.SetText requires a `message`, not a raw string.
vault_warning<localizes>(S : string) : message = "{S}"

vault_billboard_device := class(creative_device):

    # Wire this to your Billboard device in the UEFN details panel.
    @editable
    Billboard : billboard_device = billboard_device{}

    # Wire this to a Trigger device the player steps on.
    @editable
    Plate : trigger_device = trigger_device{}

    OnBegin<override>()<suspends> : void =
        # Start with the billboard hidden — no spoilers before the puzzle begins.
        Billboard.HideText()
        Billboard.SetShowBorder(false)

        # Wait for the pressure plate to fire.
        Plate.TriggeredEvent.Await()

        # Phase 1: warning — big text, border visible.
        Billboard.SetText(vault_warning("⚠ SECURITY BREACH DETECTED ⚠"))
        Billboard.SetTextSize(24)          # Maximum allowed size.
        Billboard.SetShowBorder(true)      # Show the physical border frame.
        Billboard.UpdateDisplay()          # Flush the new text to the screen.
        Billboard.ShowText()               # Make the text visible.

        # Hold the warning for 3 seconds.
        Sleep(3.0)

        # Phase 2: vault open — smaller text, no border (clean look).
        Billboard.SetText(vault_warning("VAULT OPEN — ENTER NOW"))
        Billboard.SetTextSize(14)
        Billboard.UpdateDisplay()          # Apply the new text + size.
        Billboard.SetShowBorder(false)     # Remove the border frame.

        # Confirm the final size in the log (GetTextSize is transactional — safe to call anywhere).
        CurrentSize : int = Billboard.GetTextSize()
        Print("Billboard text size is now: {CurrentSize}")

        # Leave the vault-open message visible indefinitely.

Line-by-line explanation:

Lines What's happening
vault_warning<localizes> Converts a plain string into a message value — required by SetText.
HideText() / SetShowBorder(false) Hides both the text and the border on startup so the billboard is invisible.
Plate.TriggeredEvent.Await() Suspends until the pressure plate fires — no polling needed.
SetText(...) Queues new text content. The display won't update until UpdateDisplay() is called.
SetTextSize(24) Sets the largest allowed text size (clamped to 8–24).
SetShowBorder(true) Makes the physical border mesh (and its collision) visible.
UpdateDisplay() Required — flushes the queued text/size changes to what players actually see.
ShowText() Reveals the text layer (separate from the border).
Sleep(3.0) Waits 3 seconds before switching to the vault-open message.
GetTextSize() Reads back the current size — useful for conditional logic or debugging.

Common patterns

Pattern 1 — Toggle visibility with ShowText / HideText

A hint sign that pulses on and off every 2 seconds to draw attention to a nearby objective.

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

hint_pulse_device := class(creative_device):

    @editable
    HintBoard : billboard_device = billboard_device{}

    OnBegin<override>()<suspends> : void =
        # Pulse the billboard on/off indefinitely.
        loop:
            HintBoard.ShowText()
            Sleep(1.5)
            HintBoard.HideText()
            Sleep(0.5)

Pattern 2 — Swap messages with SetText + UpdateDisplay

A scoreboard-style billboard that cycles through three round-result messages, each displayed for 4 seconds.

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

round_result<localizes>(S : string) : message = "{S}"

round_announcer_device := class(creative_device):

    @editable
    Announcer : billboard_device = billboard_device{}

    OnBegin<override>()<suspends> : void =
        Messages : []string = array:
            "ROUND 1 — FIGHT!"
            "ROUND 2 — FIGHT!"
            "FINAL ROUND — FIGHT!"

        Announcer.SetTextSize(20)
        Announcer.ShowText()

        for (Msg : Messages):
            Announcer.SetText(round_result(Msg))
            Announcer.UpdateDisplay()   # Must call this after SetText to refresh the display.
            Sleep(4.0)

        Announcer.HideText()

Pattern 3 — Border toggle with GetShowBorder

A device that checks the current border state and flips it — useful when you want to toggle without tracking state yourself.

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

border_toggle_device := class(creative_device):

    @editable
    Sign : billboard_device = billboard_device{}

    @editable
    ToggleButton : button_device = button_device{}

    OnBegin<override>()<suspends> : void =
        ToggleButton.InteractedWithEvent.Subscribe(OnButtonPressed)
        # Keep the coroutine alive.
        Sleep(Inf)

    OnButtonPressed(Agent : agent) : void =
        # Read the current border state and invert it.
        CurrentBorder : logic = Sign.GetShowBorder()
        if (CurrentBorder = true):
            Sign.SetShowBorder(false)
        else:
            Sign.SetShowBorder(true)

Gotchas

1. SetText alone does nothing visible — you must call UpdateDisplay() after it. This is the most common mistake. SetText queues the new content internally, but the device only refreshes what players see when UpdateDisplay() is called. Always pair them:

Sign.SetText(MyMessage("New text"))
Sign.UpdateDisplay()  # ← required

2. SetText requires a message, not a string. Verse's localization system means you cannot pass a raw string literal directly. Declare a localizer function:

my_label<localizes>(S : string) : message = "{S}"
// Then:
Sign.SetText(my_label("Hello World"))

There is no StringToMessage helper — the <localizes> attribute is the correct pattern.

3. SetTextSize is clamped to [8, 24]. Values outside this range are silently clamped — passing 100 gives you 24, passing 1 gives you 8. Use GetTextSize() after setting if you need to confirm the effective value.

4. ShowText / HideText and SetShowBorder are independent. The text layer and the border mesh are controlled separately. Calling HideText() hides the text but leaves the border frame visible (and its collision active). If you want the device fully invisible, call both HideText() and SetShowBorder(false).

5. SetShowBorder also controls collision. The border mesh is a physical object — when it's visible (SetShowBorder(true)), players and projectiles collide with it. If you want a purely cosmetic text overlay with no collision, keep the border hidden.

6. The device must be declared as an @editable field. You cannot construct a billboard_device in Verse code — it must be placed in UEFN and wired via the details panel. A bare billboard_device{} in OnBegin without the @editable annotation will not reference your placed device.

Device Settings & Options

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

Billboard Device settings and options panel in the UEFN editor — Text, Text Size, Text Justification, Text Font, Outline, Shadow, Text Color, Background Color, Operat Summ
Billboard Device — User Options (1 of 2) in the UEFN editor: Text, Text Size, Text Justification, Text Font, Outline, Shadow, Text Color, Background Color, Operat Summ
Billboard Device settings and options panel in the UEFN editor — Text, Text Size, Text Justification, Text Font, Outline, Shadow, Text Color, Background Color, Operat Summ
Billboard Device — User Options (2 of 2) in the UEFN editor: Text, Text Size, Text Justification, Text Font, Outline, Shadow, Text Color, Background Color, Operat Summ
⚙️ Settings on this device (9)

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

Text
Text Size
Text Justification
Text Font
Outline
Shadow
Text Color
Background Color
Operat Summ

Guides & scripts that use billboard_device

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

Build your own lesson with billboard_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 →