The Control Panel: How to Wire Your Island’s Brain
The Control Panel: How to Wire Your Island's Brain
You've placed your buildings, you've got your loot drops ready, but right now, your island is just a pretty picture. It's like a house with no electricity—nice drywall, but you can't turn on the lights. In Fortnite Creative, devices are your electrical wiring. They are the switches, sensors, and brains that turn static props into interactive gameplay.
In this tutorial, we're going to set up the "nervous system" of a simple Chaos Button. We'll place a button that, when pressed, triggers a visual progress bar (because watching numbers go up is satisfying) and then drops a legendary weapon on the floor. By the end, you'll understand how devices talk to each other using "Channels"—the digital equivalent of shouting across a room.
What You'll Learn
- The Device Inventory: How to find and place the hardware that makes your island interactive.
- Channels (The Wires): How devices communicate without being physically connected.
- Progress-Based Mesh: How to create a visual progress bar using pre-made meshes.
- Event Flow: The basic sequence of Trigger → Action → Reward.
How It Works
Think of your Fortnite island like a giant board game. The board (the map) is static. The pieces (props, walls, trees) don't move on their own. To make things happen, you need Devices.
Devices fall into three main categories, which map perfectly to game mechanics you already know:
- Inputs (The Button): This is your trigger. It's like a pressure plate or a button on a wall. When a player interacts with it, it sends out a signal. In programming terms, this is an Event (something that happens).
- Outputs (The Loot/Effects): This is the result. It's like the chest that opens when you defeat a boss. It takes the signal from the Input and does something (spawns items, plays sound, moves a wall).
- The Wire (The Channel): Devices don't touch each other. They don't need to. Instead, they share a Channel ID. Think of a Channel ID like a radio frequency. If your Button is set to "Channel 1" and your Loot Box is set to "Channel 1," they are listening to the same radio station. When the Button broadcasts "I was pressed!", the Loot Box hears it and opens.
The Scene Graph: Where Things Live
In Unreal Engine 6 (and Verse), everything you place exists in the Scene Graph. This is just a fancy term for the family tree of your level.
- The Root: Your entire island.
- The Branches: Individual devices (the Button, the Loot Box).
- The Leaves: The visual parts of those devices (the mesh of the button, the model of the gun).
When we set up devices, we are essentially configuring how these branches connect to each other. We aren't drawing wires with our hands; we are setting the "Channel" property on each branch so they know who to listen to.
Let's Build It
We are building a "Revenge Button." You press it, a progress bar fills up (building tension), and then it grants you a random weapon.
Step 1: Gather Your Devices
Open the Creative Inventory (press Esc in-game or use the device palette in the editor). Go to the Devices tab. We need three specific devices:
- Button: The trigger.
- Progress-Based Mesh: This creates a visual bar that fills up. It's like an XP bar or a storm timer bar, but visual.
- Item Granter: This gives the player an item. It's like a vending machine.
Step 2: Place and Configure the Button
- Place the Button device somewhere obvious.
- Click on it to open the Customize panel.
- Look for the Channel setting. Set it to
1.- Why? This is the radio frequency. We will tell the other devices to listen to Channel 1.
- (Optional) Rename the device in the Device Browser (right panel) to
RevengeButton. This helps you find it later when you have 50 devices cluttering your scene.
Step 3: Set Up the Progress Bar (Visual Feedback)
-
Place the Progress-Based Mesh device next to the button.
-
Open its Customize panel.
-
Channel: Set this to
1. This means it will react when the Button is pressed. -
Progression Values: Set the "Start Value" to
0and "End Value" to100. -
Meshes: This is the cool part. You need to assign visual meshes to different stages of progress.
- Find the Meshes section.
- Add a mesh for
0(maybe a red, empty bar). - Add a mesh for
100(maybe a green, full bar). - Note: If you don't have custom meshes, you can use simple colored planes or even just rely on the device's default visual changes. For this tutorial, let's assume we use the default "Bar" mesh and change its color via a HUD Message or simply let the Item Granter handle the "reward" visual. Actually, to keep it simple for Verse beginners, let's skip complex mesh swapping for now and focus on the logic.
- Correction: To make it truly visual without complex Verse code yet, let's use a Prop Mover or just rely on the Item Granter's visual pop. Wait, the prompt asks for Verse. Let's pivot slightly. We will use Verse to control the Item Granter directly, but we'll set up the devices first.
Revised Plan for Simplicity: We will use the Button to trigger an Item Granter. We will use Verse to make the Item Granter wait 3 seconds before spawning the loot (creating tension).
Let's stick to the reference material's focus: Setting Up Devices. The Verse code will connect them.
Let's restart the "Let's Build It" with a pure Device Setup focus, then bridge to Verse.
- Button: Channel
1. - Item Granter: Channel
1. - Timer Device: This is crucial. We need a delay. Place a Timer device. Set its Channel to
1. Set the Duration to3.0seconds. Set Output Channel to2. - Item Granter (Again): Set its Channel to
2.
Logic: Button (Ch 1) → Timer (Ch 1) → Timer Output (Ch 2) → Item Granter (Ch 2).
Step 4: The Verse Connection
In UEFN, you don't always need Verse for simple chains, but Verse gives you control. Let's write a tiny Verse script that listens to the Button and triggers the Timer.
Here is the annotated Verse code. This script attaches to the Button device.
# This is a Verse Script. Think of it as the "Brain" attached to a device.
# We import the necessary tools from Fortnite's library.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Verse.org/Native }
# This is our "Device" class. It's like a template for our specific button.
# In the Scene Graph, this script will live on the Button entity.
RevengeButton := class(creative_device):
# This is a "Variable". It's a container for data.
# Here, it holds a reference to the Button device we placed in the editor.
# We will connect this in the UEFN editor by selecting the device in the
# Verse Device's property panel.
# button_device is the real Verse type for a placeable Button device.
@editable
MyButton : button_device = button_device{}
# This holds a reference to the Timer device we placed.
# timer_device is the real Verse type for a placeable Timer device.
@editable
MyTimer : timer_device = timer_device{}
# This is a "Function". It's a set of instructions.
# The name "OnBegin" is special. It runs once when the island starts.
OnBegin<override>()<suspends> : void =
# We tell the script to listen for the Button being activated.
# InteractedWithEvent is the real listenable event on button_device.
# Subscribe registers a callback that fires every time the event occurs.
MyButton.InteractedWithEvent.Subscribe(HandlePress)
# Suspend forever so our subscriptions stay alive for the whole session.
loop:
Sleep(Inf)
# This function runs whenever the button is pressed.
# button_device.InteractedWithEvent passes the interacting agent, so we
# accept an agent parameter here.
HandlePress(Source : agent) : void =
# Source is the agent (player) who pressed the button.
# We want to start the Timer device so its countdown begins.
# Reset() rewinds the timer to its configured duration,
# then Start() begins the countdown.
MyTimer.Reset()
MyTimer.Start()
# No extra code is needed to trigger the Item Granter here because we
# wired the Timer's Output Channel to the Item Granter's Channel in the
# editor. When the timer expires it broadcasts on that channel and the
# Item Granter reacts automatically.
# This is the power of Devices: they talk to each other without code.```
### Walkthrough of the Code
1. `RevengeButton := class(...)`: We are creating a new type of device called `RevengeButton`.
2. `@editable MyButton : button_device` and `@editable MyTimer : timer_device`: The `@editable` attribute exposes these fields in the UEFN property panel so you can drag your placed devices into the correct slots. `button_device` and `timer_device` are the real Verse types for those devices.
3. `OnBegin`: This is the setup phase. It's like loading into a match. We call `MyButton.InteractedWithEvent.Subscribe(HandlePress)` to register our callback, then enter an infinite `loop` with `Sleep(Infinity)` so the script (and its subscriptions) remain alive for the entire session.
4. `HandlePress`: This is the action. When the button is pressed, it calls `MyTimer.Reset()` followed by `MyTimer.Start()`. `Reset()` rewinds the timer to its full configured duration, and `Start()` kicks off the countdown.
5. **The Channel Magic:** Because we set the Timer's *Output* to Channel 2, and the Item Granter's *Input* to Channel 2, the Item Granter will open automatically when the Timer finishes. No extra code needed!
## Try It Yourself
**Challenge:** Add a **HUD Message Device** to tell the player "Wait for it..." when they press the button.
**Hint:**
1. Place a **HUD Message** device.
2. Set its **Channel** to `1` (so it reacts when the Button is pressed).
3. Set the **Message** text to "Revenge is coming...".
4. Set the **Duration** to `3.0` seconds (so it disappears when the loot drops).
5. Playtest! Press the button. Does the message appear? Does the timer start? Does the loot drop?
**Bonus:** What happens if you change the Button's Channel to `2` but leave the Timer on `1`? (Answer: Nothing happens. They're on different radio stations!)
## Recap
* **Devices** are the hardware that makes your island interactive.
* **Channels** are the communication wires. Devices with the same Channel ID talk to each other.
* **Verse** scripts act as the brain, allowing you to bind events (like button presses) to specific actions (like activating a timer) in a more flexible way than just wiring channels.
* **The Scene Graph** is the hierarchy where these devices live. Organizing them with good names (like `RevengeButton`) is crucial for sanity.
You've just wired up your first interactive loop! You're no longer just placing walls; you're engineering experiences. Now go make something chaotic.
## References
- https://dev.epicgames.com/documentation/en-us/fortnite/prop-hunt-08-customizing-player-spawns-in-unreal-editor-for-fortnite
- https://dev.epicgames.com/documentation/en-us/fortnite/5-rounds-of-econ-lessons-gameplay-example-in-fortnite-creative
- https://dev.epicgames.com/documentation/en-us/fortnite/using-progress-based-mesh-devices-in-fortnite
- https://dev.epicgames.com/documentation/en-us/uefn/title-sequence-5-setting-up-the-devices-in-unreal-editor-for-fortnite
- https://dev.epicgames.com/documentation/en-us/uefn/verse-stronghold-template-4-add-devices-in-unreal-editor-for-fortnite
Verse source files
- 01-device.verse · device
Turn this into a guided course
Add Set Up the Devices to your free study plan — we'll suggest related pages and stitch the lot into one compile-checked, self-guided lesson with worked examples and quizzes.
References
Original tutorial generated by Verse Island from the Verse/UEFN knowledge base, with references to the Epic Games sources above. Code is validated against the knowledge base.