Reference · UEFN devices

Settings that matter, behaviour that bites

Device knowledge from building a live-concert island. Native class paths and property names are given where they were verified against a real project, because you need them the moment you edit devices through tooling instead of the Details panel.

Audio Player

audio_player_device · /CRD_AudioPlayer/Device_CRD_AudioPlayer.Device_CRD_AudioPlayer_C

PropertyTypeNotes
syncPlayerAudioboolThe one that matters. Keeps audio synchronised across all players. Off by default
loopAudioboolRestart after finishing
limitAudioDistanceboolGlobal vs. falloff
audioDistancenumberFalloff radius when limited

Without syncPlayerAudio, a track started at minute two is simply not playing for anyone who arrives at minute three: silence for the rest of the song, not a late start. This hits latecomers, reconnects and anyone who respawns. Use one device per track rather than one long mix.

Audio Player Details panel with Sync Player Audio highlighted

Player Spawner

player_spawner_device · /CRD_PlayerSpawn/BP_Creative_Player_Spawner_Prop.BP_Creative_Player_Spawner_Prop_C

Verse exposes Enable() / Disable(). Native has enable / disable as channel-driven event functions, plus priorityGroupSetting (lower is chosen first) and bRespawnAlivePlayers.

  1. Every enabled spawner is a candidate for both initial spawn and respawn. A second one anywhere immediately starts catching ordinary spawns.
  2. A newly placed spawner is enabled by default, and Disable() does nothing until its @editable field is wired to that actor. An empty field silently no-ops.

Pattern: for a special mode, give it a dedicated spawner, Disable() it in OnBegin, and swap enabled state on both sides when the mode starts and ends.

Teleporter

teleporter_device · /CreativeCoreDevices/Device_Teleporter_V2.Device_Teleporter_V2_C

  • EnterEvent / TeleportedEvent are subscribable.
  • Teleport(Agent) sends an agent to this device.
  • Activate(Agent), Enable(), Disable().
  • Native destinationTeleporter is a direct object reference to another teleporter, and is settable through tooling.

No per-player use limit exists. For "works once per player", clear the device's destination link and drive Teleport() yourself behind a [player]logic map. See the onboarding guide.

Beacon

beacon_device · /CreativeCoreDevices/Device_Beacon_V2.Device_Beacon_V2_C

Native propertyNotes
friendly Icon TextThe label on the HUD marker
showOffscreenArrowArrow pointing to it when off screen
displayDistanceTextDistance readout
beacon Color—

Use this instead of building a landmark by hand. It gives a HUD icon, an off-screen arrow and a distance label for free. Keep beacons in sync with what they point at: a marker over an inactive station is worse than no marker.

Post Process

post_process_device · /CRD_PostProcess/Device_PostProcess.Device_PostProcess_C

Verse: Enable(), Disable(), BlendInForAll(), BlendOutForAll(). Native event functions mirror these (enableForAll, blendInForAll, disableForAll, blendOutForAll, resetForAll, plus …ForInstigator variants). Settings: postProcessEffect, effectDuration, blendInDuration, blendOutDuration, priority.

Test quickly: wire a spare Button's interact event to Enable For All and Blend In For All. When cueing: blend the previous look out before blending the next in, and track which is active, or they stack.

Customizable Light

customizable_light_device · TurnOn() / TurnOff()

Name them by position and subject (Key_Left_Vocalist), not by number. You'll drag dozens into cue arrays by hand.

VFX Spawner

vfx_spawner_device · /…/Device_VFXSpawner_V2.Device_VFXSpawner_V2_C

  • visual_Effect / developerVisualEffect: an enum. Default is DiscoBalls. Confirmed working: DiscoBalls, Sparkles, SmallTornado. Not exposed in the Verse digests; other values need trial.
  • customVisualEffect: assign a Niagara system directly.
Unresolved

A custom Niagara system assigned through customVisualEffect never rendered in this project, despite compiling clean and being checked through two delivery paths. Cause unknown. A coloured Point Light was used instead.

Cinematic Sequence + camera streaming

cinematic_sequence_device · Play(), StoppedEvent.Await()

World Partition streams the world around the player pawn, not a Cine Camera Actor. A camera that flies away from players shows empty terrain. Add a WorldPartitionStreamingSourceComponent to the camera actor:

PropertyValue used
bStreamingSourceEnabledtrue
priorityHighest
targetStateActivated
shapesone shape, bUseGridLoadingRange: false, radius: 15000
Cine Camera Actor with the streaming source component settings

Island Settings

/CreativeCoreDevices/Device_ExperienceSettings_V2_UEFN.Device_ExperienceSettings_V2_UEFN_C

What you wantPropertyNotes
Glider always usablebGliderRedeploy, bGliderRedeployableSet both
Infinite staminabInfiniteLoadedEnergy, bInfiniteReserveEnergyStamina is Energy internally
Player-vs-player damagebAllowFriendlyFireOn a single-team island this enables PvP
Fall damagebFallDamage, fallDamageMultiplier—

teamDamageFilter is about structures, not players. Energy tuning: energyMax, energyRechargeAmount, energyRechargeDelay, sprintingEnergyCostPerSecond.

Working through editor tooling

Struct arrays are opaque

An @editable []some_struct field can't be read or written through the generic object-property API: both fail with "could not be read/set". Anything struct-shaped must be wired by hand. Keep struct field counts deliberate.

Prop mesh overrides don't stick

Parent_BuildingPropActor_C's StaticMeshComponent0.StaticMesh override silently reverts to null: seen on roughly 17 of 27 props in one session. Always verify with an actor-bounds check; a degenerate box (min equals max) means the mesh is gone. Reapply and save immediately. No reliable prevention found.

Useful checks

  • Verse builds: BuildAll returns an empty array on success, or diagnostics with file and line.
  • Property names: always list an object's properties before setting them. They differ from Details panel labels.
  • Enums: invalid values fail with "the following properties could not be set". Some enums have no digest exposure at all.