Objects in your project, such as creative devices, Scene Graph entities and components, and NPC behaviors, depend on their Verse classes. When UEFN can't find one of those classes because it was renamed, moved or deleted, or because your Verse code doesn't compile, it keeps the affected object as a placeholder instead of dropping it.
A placeholder holds the object's place in your level or prefab with its saved values. Only its Verse class is missing. The Data Recovery tool lists the placeholders in all loaded assets, such as your open level and the prefabs it uses, and helps you fix them by replacing the missing class with another class or deleting the placeholders.
How Placeholders Work
A placeholder stands in for an object whose Verse class can't be found and behaves as follows:
It keeps your data. The object stays where it was, with the values that were saved with it.
It blocks saving. You can't save a level, prefab or other asset while it contains a placeholder. This stops a save from overwriting your data before you fix the problem.
It doesn't change your files. Your files keep their original data until you fix the placeholder and save.
It goes away when you fix it. Replace the class or delete the placeholder in the Data Recovery tool, or restore the missing class in VS Code.
While a level or prefab contains placeholders, you can’t save it. If your Verse code has errors, auto-save is turned off completely, and you’ll see the message “Autosave disabled due to Verse build errors”. Fix placeholders before you do more work in that level or prefab so you don’t lose your changes if the editor closes.
Any object that depends on a Verse class can become a placeholder, including:
The Verse script of a creative device. The device stays in your level; its Verse part becomes a placeholder.
Scene Graph entities and components.
Objects stored in
@editableproperties of Verse classes. For example, an instance of a Verse class held by a device or a component.Verse NPC behaviors assigned to an NPC Spawner or to an NPC Character Definition.
Entity prefabs whose prefab asset is missing.
Placeholders appear in the following situations:
You open a level, prefab or other asset that uses a Verse class that no longer exists. This happens when the class was renamed, moved or deleted, for example by a teammate.
You build your Verse code (Verse > Build Verse Code, or Compile Verse in the toolbar) after renaming or deleting a class that something in your open level or prefabs still uses.
You open a project whose Verse code doesn't compile and choose Skip Rebuild. Objects that use any class from your project's Verse code open as placeholders, including classes in files that have no errors.
A prefab that other prefabs or levels use was deleted.
Recognizing Placeholders in Your Project
When your project contains placeholders, UEFN restricts saving and displays alerts and information in the Data Recovery tool, Outliner, and Details panel:
Data Recovery tool: The tool opens automatically when placeholders appear (when you open a level or prefab that contains them or when a Verse build turns objects into placeholders). The tool opens in its own window that you can dock like any other tab.
Outliner: Every device, entity, or other actor that contains a placeholder shows a red error alert in the Outliner. A parent entity shows a gray alert with the number of errors below it. Hover over an alert to read what happened. Click an alert to open the Data Recovery tool with that placeholder selected.
The Prefab Editor's Outliner shows the same alerts for placeholders inside a prefab, including on the placeholder component itself.
Details panel: The Details panel displays a message or alert, depending on the object:
A creative device whose Verse script is a placeholder shows a message in place of its Verse properties. It explains that the device's Verse class failed to load and how to recover it.
On devices and other actors, a property that holds a placeholder shows a red alert icon at the end of its row. Hover over it to read what happened; click it to open the Data Recovery tool with that placeholder selected.
An entity's component list shows an alert on any component that is or contains a placeholder. Selecting a placeholder component shows no properties.
Saving fails. If you save a level, prefab or asset that contains a placeholder, the save fails and the editor names the asset that couldn't be saved. Click Continue to skip it and save everything else; a summary then lists what couldn't be saved, and the Message Log shows the details.
Opening and Closing the Data Recovery Tool
The Data Recovery tool opens on its own when placeholders appear, and closes on its own when none are left.
You can open it manually by doing any of the following:
In the main menu, go to Tools > Data Recovery. The Data Recovery option is disabled (grayed out) when there is nothing to recover.
Click a placeholder alert in the Outliner or the Prefab Editor. The tool opens with that placeholder selected. For an alert on an entity or actor that contains placeholders, the tool selects the first of them.
Click the alert icon next to a property in the Details panel.
Data Recovery Tool Layout
The tool groups placeholders by their missing class.
| Element | Description |
|---|---|
Errors (N) | The column header. N is the number of missing classes. |
Missing Class: ClassName | One row per missing class, with how many references to it were found in the loaded assets. Rows start collapsed; expand one to see its placeholders. |
Placeholder row | One row per placeholder: a breadcrumb trail from the level, prefab or asset that contains it to the nearest entity, component or actor that owns it. |
Navigate | On each placeholder row. Selects the placeholder, or what owns it, in the editor. |
Replace | On each missing-class row. Replaces the missing class with one you choose, for every placeholder of that class. |
Delete | On each missing-class row. Deletes every placeholder of that class. |
The Data Recovery tool shows only the placeholders in loaded assets. Placeholders in a level or prefab that isn't loaded appear when you open it.
Fixing Placeholders
Choose the fix that matches what happened to create the placeholder:
| What Happened | Fix |
|---|---|
The change was a mistake, the Verse code doesn't compile, or a prefab was deleted by mistake. | |
The class was renamed on purpose, or another class should be used | |
You no longer need the objects | |
Only some objects need a different fix | Fix placeholders one at a time. |
Replace and Delete actions apply to every placeholder of a class and can't be undone.
Restore the Missing Class
If a prefab was deleted, restore the prefab asset, for example from Lore Version Control. You can also replace or delete its placeholders with the Data Recovery tool.
To restore a class that was changed or deleted by mistake, or to fix Verse code that doesn’t compile, do the following:
Fix your Verse code: undo the rename, restore the deleted class, or fix the compile errors.
Select Verse > Build Verse Code, or click Compile Verse in the toolbar.
If you have unsaved changes, the editor asks you to save them before it builds. A level or prefab that still contains placeholders can't be saved yet, so click Cancel. The build runs without saving.
Save your level and prefabs.
The placeholders turn back into the original objects with their original values. Their alerts clear, and the Data Recovery tool closes when no placeholders are left.
Replace the Missing Class
When a class was renamed on purpose or when another class should take its place, do the following to replace the missing class:
In the Data Recovery tool, on the Missing Class row, click Replace.
In the Replace With list, choose the class to use. Enter text in the search box to filter the list.
The list shows the missing class’ nearest existing parent class, and the classes based on it. Abstract and hidden classes don’t appear in the list.
In the Replace Placeholders dialog, click Yes. Every placeholder of the missing class now uses the class you chose, and the levels and prefabs that contain them are marked as modified. Values of properties that the class you chose also has are kept.
Save your level and prefabs. If you don’t save, the placeholders return the next time you open them.
Replacing only keeps values of properties that the new class also has. Values of other properties are lost when you save. Once you save, replacing can’t be undone.
Objects keep their names in the Outliner after you replace its class. For example, a device placed as score_tracker_device keeps that label.
Delete Placeholders
To delete placeholders for objects you no longer need, do the following:
In the Data Recovery tool, on the Missing Class row, click Delete.
In the Delete Placeholders dialog, click Yes. Every placeholder of that class is deleted from the loaded assets. If a placeholder is a creative device's Verse script, the device is deleted too. A property that held a deleted placeholder is left empty (None); set it again in the Details panel if you need it.
Save your level and prefabs. If you don’t save, the placeholders return the next time you open them.
Deleting can't be undone.
Fix Placeholders One at a Time
Replace and Delete change every placeholder of a class. To handle one placeholder differently, click Navigate (folder icon) on its row, then fix it with the usual editor tools, for example by removing a component in the Details panel or deleting a device.
For a placeholder inside a prefab, Navigate opens the Prefab Editor, and for one inside another asset, such as an NPC Character Definition, it opens that asset's editor. Everything else is selected in the level editor.
Launch Session and Push Changes
Launch Session and Push Changes save your modified assets before they upload your project because only saved assets are uploaded. A level or prefab that contains placeholders can't be saved, so fix placeholders before you launch a session or push changes.
Things to Know
After using Replace or Delete, save the affected levels and prefabs. If you don't, the placeholders come back the next time you open them.
Auto-save can't save a level or prefab that contains placeholders. While your Verse code has errors, auto-save is turned off ("Autosave disabled due to Verse build errors").
Troubleshooting
I can't save my level or prefab.
Check whether it contains placeholders. Look for red alerts in the Outliner or open Tools > Data Recovery (this option is available if your project has placeholders). Fix any placeholders with the Data Recovery tool, then save.
Launch Session says "All assets must be saved before upload."
One of your modified assets couldn't be saved. If it's a level or prefab that contains placeholders, fix the placeholders, or reopen the level to discard your changes.
Tools > Data Recovery is grayed out.
There is nothing to recover; no loaded asset contains a placeholder.
A device says "Failed to load the Verse class for this device" after I renamed its Verse class.
The device's Verse script is a placeholder. Rename the class back and build your Verse code (see Restore the Missing Class), or use Replace to switch the device to the renamed class (see Replace the Missing Class).
The Verse Build Errors dialog appears when I open my project.
Your Verse code doesn't compile. To fix it, click Open in VS Code next to an error, and click Rebuild and Validate.
If you clicked Skip Rebuild, when you see a Data Loss Warning, click Fix Errors First to return to the Verse Build Errors dialog.
If you accidentally skip rebuilding, your project opens and objects that use any class from your project's Verse code open as placeholders, and they are listed in the Data Recovery tool. Don't replace or delete these placeholders; fix the errors and build your Verse code to turn them back into the original objects (Restore the Missing Class).