Reference Devices compiles

dance_mannequin_device: Holograms That Dance on Command

The Dance Mannequin device projects a holographic dancer into your island — great for nightclub lobbies, victory podiums, or tutorial stages. From Verse you can swap between three configured presets, mirror a real player's skin and emote live, and toggle the whole device on or off — all at runtime without touching the UEFN editor.

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

Overview

The dance_mannequin_device projects a hologram of a character performing dance emotes. You configure up to three visual presets (skin + emote combinations) in the device's UEFN properties panel, then switch between them at runtime from Verse. The killer feature is Skin and Emote Capture: call ActivateSkinAndEmoteCapture(Agent) and the mannequin instantly mirrors whatever skin and emote the live player is wearing — perfect for a "Copy the Champion" minigame or a winner's podium that shows off the round MVP.

Reach for this device when you need:

  • An animated NPC-style dancer that isn't a real player
  • A podium that clones the winning player's look
  • Atmosphere dressing (lobby dance floors, nightclub stages) that can be toggled by game state

API Reference

dance_mannequin_device

Used to project a hologram of a character performing dance emotes.

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

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

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.
ActivateDefaultPreset ActivateDefaultPreset<public>():void Activates the hologram using Default Preset options.
ActivatePreset2 ActivatePreset2<public>():void Activates the hologram using Preset 2 options.
ActivatePreset3 ActivatePreset3<public>():void Activates the hologram using Preset 3 options.
ActivateSkinAndEmoteCapture ActivateSkinAndEmoteCapture<public>(Agent:agent):void Activates the hologram using Agent's skin and emotes.
DeactivateSkinAndEmoteCapture DeactivateSkinAndEmoteCapture<public>():void Deactivates the hologram.

Walkthrough

Scenario — The Winner's Podium

When a round ends, a trigger fires. The mannequin first plays the Default Preset (a generic celebration), then after 5 seconds it captures the winning player's actual skin and emote. A second trigger lets the host reset everything back to the Default Preset for the next round.

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

# Attach this device to your island.
# Wire RoundEndTrigger to fire when a round finishes.
# Wire ResetTrigger to fire when a new round starts.
podium_mannequin_manager := class(creative_device):

    # The dance mannequin sitting on the winner's podium.
    @editable
    Mannequin : dance_mannequin_device = dance_mannequin_device{}

    # Fires when the round ends (e.g. from a Class Designer or custom logic).
    @editable
    RoundEndTrigger : trigger_device = trigger_device{}

    # Fires when the host resets for the next round.
    @editable
    ResetTrigger : trigger_device = trigger_device{}

    # We store the winning agent so the async routine can use it.
    var WinningAgent : ?agent = false

    OnBegin<override>()<suspends> : void =
        # Subscribe to both triggers.
        RoundEndTrigger.TriggeredEvent.Subscribe(OnRoundEnd)
        ResetTrigger.TriggeredEvent.Subscribe(OnReset)

        # Start with the mannequin enabled and showing the default preset.
        Mannequin.Enable()
        Mannequin.ActivateDefaultPreset()

    # Called when the round-end trigger fires.
    # The trigger sends ?agent; unwrap before use.
    OnRoundEnd(MaybeAgent : ?agent) : void =
        if (A := MaybeAgent?):
            set WinningAgent = option{A}
            spawn { RunPodiumSequence(A) }
        else:
            # No agent context — just play the default celebration.
            Mannequin.ActivateDefaultPreset()

    # Async routine: play default preset, wait, then mirror the winner.
    RunPodiumSequence(Winner : agent)<suspends> : void =
        # Step 1 — generic celebration hologram while the camera pans.
        Mannequin.ActivateDefaultPreset()
        Sleep(5.0)

        # Step 2 — clone the winner's skin and current emote.
        Mannequin.ActivateSkinAndEmoteCapture(Winner)

    # Called when the reset trigger fires — prepare for the next round.
    OnReset(MaybeAgent : ?agent) : void =
        # Drop any skin capture and return to the default preset.
        Mannequin.DeactivateSkinAndEmoteCapture()
        Mannequin.ActivateDefaultPreset()
        set WinningAgent = false

Line-by-line breakdown

Lines What's happening
@editable Mannequin Exposes the mannequin slot in the UEFN details panel so you can point it at the placed device.
Mannequin.Enable() Ensures the device is on at game start (it might have been disabled in properties).
Mannequin.ActivateDefaultPreset() Switches to the skin/emote combo you configured in Default Preset in the UEFN panel.
OnRoundEnd(MaybeAgent : ?agent) Trigger events send ?agent; we unwrap with if (A := MaybeAgent?): before passing to the async routine.
spawn { RunPodiumSequence(A) } Launches the timed sequence without blocking the event handler.
Sleep(5.0) Waits 5 seconds while the camera does its cinematic pan.
Mannequin.ActivateSkinAndEmoteCapture(Winner) Mirrors the winner's actual Fortnite skin and emote onto the hologram.
Mannequin.DeactivateSkinAndEmoteCapture() Releases the skin capture so the mannequin returns to a preset state.

Common patterns

Pattern 1 — Cycling through all three presets on a button press

A nightclub has three mannequins on a stage. One button cycles the center mannequin through all three configured looks.

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

preset_cycler := class(creative_device):

    @editable
    Mannequin : dance_mannequin_device = dance_mannequin_device{}

    @editable
    CycleButton : button_device = button_device{}

    # Tracks which preset is currently active (0 = Default, 1 = Preset2, 2 = Preset3).
    var CurrentPreset : int = 0

    OnBegin<override>()<suspends> : void =
        Mannequin.Enable()
        Mannequin.ActivateDefaultPreset()
        CycleButton.InteractedWithEvent.Subscribe(OnCycle)

    OnCycle(MaybeAgent : ?agent) : void =
        set CurrentPreset = Int(Mod[Float(CurrentPreset + 1), 3.0])
        if (CurrentPreset = 0):
            Mannequin.ActivateDefaultPreset()
        else if (CurrentPreset = 1):
            Mannequin.ActivatePreset2()
        else:
            Mannequin.ActivatePreset3()

Note on the math: Verse does not auto-convert intfloat. We cast via Float() and Int() to use Mod[] (which operates on floats), then cast back.

Pattern 2 — Disable the mannequin during combat, re-enable in the safe zone

The mannequin is decorative and should only run when players are in a lobby/safe area. A mutator zone drives enable/disable.

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

lobby_mannequin_controller := class(creative_device):

    @editable
    Mannequin : dance_mannequin_device = dance_mannequin_device{}

    # A Mutator Zone that covers the lobby safe area.
    @editable
    LobbyZone : mutator_zone_device = mutator_zone_device{}

    OnBegin<override>()<suspends> : void =
        # Start disabled — no one is in the lobby yet.
        Mannequin.Disable()

        LobbyZone.AgentEntersEvent.Subscribe(OnPlayerEntersLobby)
        LobbyZone.AgentExitsEvent.Subscribe(OnPlayerExitsLobby)

    OnPlayerEntersLobby(Agent : agent) : void =
        # First player enters — light up the mannequin.
        Mannequin.Enable()
        Mannequin.ActivateDefaultPreset()

    OnPlayerExitsLobby(Agent : agent) : void =
        # Check if the zone is now empty; if so, power down.
        if (GetAgentsInZone() = 0):
            Mannequin.DeactivateSkinAndEmoteCapture()
            Mannequin.Disable()

    # Helper — count agents currently in the lobby zone.
    GetAgentsInZone() : int =
        LobbyZone.GetAgentsInVolume().Length

Pattern 3 — Mirror a specific player's skin on demand

A "Copy Cat" minigame: when a player presses a button, the mannequin instantly copies their look. Any other player pressing the button steals the spotlight.

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

copy_cat_mannequin := class(creative_device):

    @editable
    Mannequin : dance_mannequin_device = dance_mannequin_device{}

    @editable
    SpotlightButton : button_device = button_device{}

    OnBegin<override>()<suspends> : void =
        Mannequin.Enable()
        Mannequin.ActivateDefaultPreset()
        SpotlightButton.InteractedWithEvent.Subscribe(OnSpotlightPressed)

    OnSpotlightPressed(MaybeAgent : ?agent) : void =
        if (A := MaybeAgent?):
            # Drop any previous capture and mirror this player immediately.
            Mannequin.DeactivateSkinAndEmoteCapture()
            Mannequin.ActivateSkinAndEmoteCapture(A)
        else:
            # No agent context — fall back to default preset.
            Mannequin.ActivateDefaultPreset()

Gotchas

1. ActivateSkinAndEmoteCapture needs a live agent, not ?agent The method signature is ActivateSkinAndEmoteCapture(Agent:agent) — it takes a concrete agent, not an optional. Always unwrap ?agent from trigger/button events with if (A := MaybeAgent?): before passing it in.

2. Calling ActivatePreset2 or ActivatePreset3 without configuring them in UEFN is a no-op The three presets (Default, Preset 2, Preset 3) are configured entirely in the device's UEFN details panel. If you call ActivatePreset2() but never set a skin/emote for Preset 2, nothing visible changes. Always verify your presets in the editor first.

3. DeactivateSkinAndEmoteCapture before switching presets If the mannequin is currently in skin-capture mode and you call ActivateDefaultPreset() directly, the transition may not behave as expected on all builds. The safe pattern is always DeactivateSkinAndEmoteCapture() → then ActivateDefaultPreset() / ActivatePreset2() / ActivatePreset3().

4. Enable/Disable vs. Activate/Deactivate Enable() and Disable() control whether the device is active at all (think power switch). The Activate* and Deactivate* methods control which hologram is displayed. A disabled mannequin ignores all Activate* calls — always Enable() before trying to switch presets.

5. No events on this device dance_mannequin_device exposes zero listenable events. It is a pure output device — you drive it from other devices' events (triggers, buttons, zone entries). Don't look for an OnActivated event; it doesn't exist.

6. intfloat conversions are explicit If you do arithmetic to cycle preset indices (as in the cycling pattern above), remember Verse never auto-converts between int and float. Use Float() to cast up and Int() to cast back down.

Device Settings & Options

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

Dance Mannequin Device settings and options panel in the UEFN editor — Show Pedestal, Show Stage Light, Dance Emote Default Preset, Hue Default Preset, Strobe, Pedestal Color, Hue Override
Dance Mannequin Device — User Options in the UEFN editor: Show Pedestal, Show Stage Light, Dance Emote Default Preset, Hue Default Preset, Strobe, Pedestal Color, Hue Override
⚙️ Settings on this device (7)

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

Show Pedestal
Show Stage Light
Dance Emote Default Preset
Hue Default Preset
Strobe
Pedestal Color
Hue Override

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