World Partition and World Manifest
Setting up a World Partition map, building and validating the World Manifest, Pending Restore, and how effective identity keeps streamed content correct.
A streamed world breaks the simple assumption that “the Actor is either here or it was destroyed”. An Actor can be absent because its cell unloaded, absent because it never loaded this session, or absent because it was genuinely destroyed — and each case needs a different answer.
Setting up a World Partition map
- Add a WSRF State Component to the Actors that take part in resets.
- Pick a Behavior Preset and a Region.
- Open Tools → World State Reset Framework → World State Inspector.
- Click Build World Manifest.
- Save the manifest asset and the map changes when Unreal prompts you.
The Inspector then reports Manifest Valid. That is the whole normal workflow — no container IDs, no ActorDesc metadata, no GUIDs to copy.
When to rebuild
Rebuild after changing managed Actors, Stable IDs, regions, policies, Actor classes, Data Layers or container structure. Ordinary gameplay changes and level dressing do not require a rebuild.
What the World Manifest is
UWSRFWorldManifest is a cookable data asset generated explicitly by the editor tooling. It is
referenced from World Settings through a lightweight runtime component
(UWSRFWorldManifestComponent) so cooking retains it.
It holds one FWSRFWorldManifestEntry per managed placed Actor:
| Field | Purpose |
|---|---|
EffectiveActorId | Stable ID plus container context |
ContainerIdentity | Source level package, runtime package, container label, Data Layers |
ActorClass | Soft class reference, for respawn |
SourceActorPath | Where the authored Actor lives |
Regions | Authored region membership |
Policy | Authored reset policy |
Origin, ResetPriority | Authored ordering and origin |
ConfigurationHash | Detects that authored configuration changed |
bRespawnable | Whether the class can be recreated |
Asset-level fields record the schema version, the source world, a build GUID and the build timestamp.
The manifest is why a reset can be correct for an Actor that has never loaded during this session: the subsystem seeds records from it and knows the Actor exists, which region owns it and what its policy says, before the Actor itself has ever been created.
Resetting unloaded content
Call Reset World Region normally. WSRF does not force cells or inactive Runtime Data Layers to
load. Instead:
- matching records whose Actor is not loaded are marked Pending Restore;
- the report counts them in
PendingRestore; - when the Actor registers again — its cell streams in, its Data Layer activates — the pending reset is applied at that moment.
A precise claim
Forcing every matching cell to load would make a region reset arbitrarily expensive and would defeat streaming. Pending Restore is the deliberate alternative: correct state, applied when the content is actually there.
Effective identity
A Stable ID alone is not unique in a streamed world: duplicate a Level Instance and both copies carry the same authored local IDs.
WSRF therefore uses effective identity = local Stable ID + container context
(FWSRFEffectiveActorId). The container context is an invalid GUID for the main world, and a
deterministic GUID derived from the source and runtime level packages for streamed containers.
One resolver produces that identity for registration, respawn and manifest generation, so the three never disagree.
StreamedOut versus Destroyed
| Presence | Cause | Reset behaviour |
|---|---|---|
Destroyed | Genuine Destroy() during play | Respawned exactly once by a matching reset |
StreamedOut | Level, cell or Data Layer unloaded | Never respawned; marked Pending Restore |
Getting this wrong in either direction produces the two classic streaming bugs — a duplicated Actor,
or an Actor that never comes back. WSRF classifies on EndPlay reason rather than guessing from
absence.
Fail-safe respawn
If the exact source level or container cannot be proven at respawn time, WSRF fails the record explicitly and reports it. It never falls back to spawning into the Persistent Level, because an Actor in the wrong container looks correct until the next unload.
Data Layers, sublevels and Level Instances
Covered in detail in Level Instances, Data Layers and sublevels. In short: the container identity carries the Data Layer names, repeated Level Instances stay independent, and independently streamed sublevels behave like any other container.
Advanced: internals
The following exist for diagnostics and unusual integrations. Normal Blueprint workflows never touch them.
FWSRFContainerIdentity—ContextGuid,SourceLevelPackage,RuntimeLevelPackage,ContainerLabel,DataLayers.WSRFManifest::MakeStreamingContainerGuid— deterministic container GUID from the source and runtime package names.WSRFManifest::ResolveContainerIdentity/ResolveEffectiveActorId— the shared resolver.WSRFManifest::ComputeConfigurationHash— the hash behind manifest drift detection.ResetWorldRegionInContext— restricts a reset to the container owning a context Actor.FindLoadedActorInContext,FindLoadedActorByEffectiveId— container-aware lookups.GetManifestMemoryBytes— manifest memory, for profiling.
The Runtime module never calls ActorDesc, WorldPartitionEditor, UnrealEd or Slate APIs; manifest generation is entirely editor-side.
Troubleshooting
| Symptom | Meaning | Action |
|---|---|---|
| Manifest Requires Rebuild | Authored configuration changed since the build | Click Build World Manifest and save |
| Pending Restore | The Actor is not loaded right now | Expected; it applies when the container returns |
| RestoreFailed | The source level or container could not be proven | Check that the Actor’s source level still exists |
| Duplicate effective identity | Two records resolve to the same identity | Repair duplicate local IDs, then rebuild |
Last updated: 2026-08-26