Runtime overview
The runtime contract — destructible component, destruction profile, world subsystem and the hit payload that connects them to your gameplay code.
The four types that matter
| Type | Kind | Role |
|---|---|---|
FSDFDestructionHit | Struct | The payload gameplay code sends. Damage, destruction power, impact geometry, source references, tags, seed. |
USDFDestructibleComponent | Actor component | Evaluates a hit against the profile, changes state, drives presentation, returns an explicit result. |
USDFDestructionProfile | Data asset | All the data: health, resistance, presentation mode, audio, VFX, damage stages, decals, loot, propagation. |
USDFDestructionSubsystem | World subsystem | World-level budgets, radial destruction, propagation chains, centralised cleanup, global presentation delegates. |
Flow of a hit
Gameplay System
↓
FSDFDestructionHit
↓
USDFDestructibleComponent
↓
Profile Evaluation
↓
Destruction Result
↓
Geometry Collection / SwapAndScatter
Hit evaluation is event-driven: nothing polls for hits, and the generated Actors never tick. The destructible component has one optional tick — it is enabled only while its profile turns on fall damage, to follow a falling intact prop. Simulated intact props and active Chaos debris also cost physics time, like any simulated body.
USDFDestructibleComponent
Add it to any Actor, or use one of the convenience Actors, both implementing
ISDFDestructibleInterface:
ASDFDestructibleActor— a scene root, an intact Static Mesh component, a loot spawn point and the destructible component. Used byStaticandKeep Existinggenerations and by older setups;ASDFPhysicsDestructibleActor— its subclass for props that simulate. The intact Static Mesh is the Actor’s root and its own collider. NewSimulatedgenerations use it.
The single entry point is:
Apply Destruction Damage (Hit) -> FSDFDestructionResult
Useful accessors: GetDestructionState, GetCurrentHealth, GetDestructionProfile,
GetCurrentDamageStageIndex, GetActiveImpactDecalCount.
Configuration at runtime: SetDestructionProfile, SetIntactComponent, SetLootSpawnComponent,
AddActorToReveal, ClearActorsToReveal.
Intact physics
The profile’s PhysicsMode decides whether the intact prop simulates: KeepExisting (the profile
class default), Static or Simulated (the default of new generations). A placed instance can
override it with PhysicsModeOverride or SetPhysicsModeOverride, and GetEffectivePhysicsMode
returns the mode it actually lives by.
- Support wake — when a destructible is actually destroyed, the simulating bodies resting on it
are woken so they fall.
GetLastSupportWakeCountreports how many. A rolled-back destruction wakes nothing. - Fall damage — optional, per profile. A simulating intact prop measures its drop and, on an
eligible landing, sends itself one hit tagged
SDF.Source.Collision.Fallthat goes through the normal rules.GetLastFallHeightCmandGetLastFallDamagereport the last damaging landing. - Refusals — when a configuration cannot simulate, SDF leaves the primitive untouched and reports
why through
GetIntactPhysicsStatus. - Existing content — setups generated before this feature are not converted silently; they keep their behaviour until you migrate them explicitly.
Full contract, defaults and limits: Intact physics and fall damage.
Destruction states
ESDFDestructionState is the object’s explicit lifecycle:
| State | Meaning |
|---|---|
Intact | Untouched, full health |
Damaged | Health reduced, still standing |
Breaking | Destruction committed, presentation running |
Destroyed | Destruction complete |
CleaningUp | Debris or representation being retired |
Disabled | Not accepting hits |
State changes are broadcast through OnDestructionStateChanged (PreviousState, NewState).
Destruction outcomes
Every call returns an FSDFDestructionResult whose Outcome is one of:
| Outcome | Meaning |
|---|---|
Ignored | The hit was not applicable |
Rejected | Below the profile’s damage threshold or destruction power gate |
Reacted | A valid hit that produced a reaction but no damage |
Damaged | Health was reduced |
Destroyed | The object broke |
AlreadyDestroyed | The object was already destroyed |
Disabled | The component is disabled |
InvalidConfiguration | No usable profile or intact component |
The result also carries PreviousState, NewState, ModeUsed, AppliedDamage, RemainingHealth,
RandomSeed, SpawnedDebrisCount, bDestructionTriggered, bUsedFallback and
bPresentationSuppressedByBudget.
Read the result
bUsedFallback and bPresentationSuppressedByBudget are how the framework tells you it degraded
gracefully instead of failing. Surface them in your own debug HUD while tuning a scene.
Presentation modes
ESDFDestructionMode selects the visual implementation:
| Mode | Behaviour |
|---|---|
None | No visual destruction; the object still changes state |
SwapAndScatter | Hide the intact mesh, spawn bounded debris meshes with directional impulse |
GeometryCollection | Activate a Chaos Geometry Collection representation |
Glass | Generate shards at runtime around the impact point — thin brittle surfaces only. See Runtime glass fracture |
With GeometryCollection and bFallbackToSwapAndScatter enabled, an object that cannot obtain a
Chaos representation — because the world budget is saturated or the asset is missing — automatically
uses the configured debris path instead. The result reports bUsedFallback.
Events
USDFDestructibleComponent exposes Blueprint-assignable delegates:
| Delegate | Payload |
|---|---|
OnDestructionDamageReceived | Hit, Result |
OnDestructionStateChanged | PreviousState, NewState |
OnDestructionStarted | Hit, Result |
OnDestroyed | Hit, Result |
OnDebrisSpawned | DebrisActor |
OnDestructionAudioRequested | FSDFDestructionAudioRequest |
OnDestructionVFXRequested | FSDFDestructionVFXRequest |
OnHitReactionRequested | FSDFHitReactionRequest |
OnDamageStageChanged | FSDFDamageStageChange |
OnImpactDecalRequested | FSDFDecalRequest |
OnLootRequested | FSDFLootRequest |
The subsystem mirrors the audio and VFX requests globally through OnDestructionAudioRequested and
OnDestructionVFXRequested, which is the right hook for middleware routing.
USDFDestructionSubsystem
A world subsystem, so it exists per world and needs no manual setup.
| Area | API |
|---|---|
| Budgets | ConfigureBudgetLimits, GetBudgetLimits, GetBudgetStats, ResetBudgetStatistics |
| Radial | ApplyRadialDestruction, CalculateRadialFalloffMultiplier, CalculateRadialTargetSeed |
| Propagation | CalculatePropagationSeed, GetLastPropagationChainResult, OnPropagationChainCompleted |
| Audio | OnDestructionAudioRequested, GetAudioStats, GetLastAudioRequest, ResetAudioStatistics |
| VFX | OnDestructionVFXRequested, GetVFXStats, GetLastVFXRequest, ResetVFXStatistics |
| Debris | GetActiveDebrisCount |
Budget admission and Chaos reservation are internal. Commercial callers use configuration and diagnostics; the framework decides admission itself.
The destructible interface
ISDFDestructibleInterface is the generic contract external systems can rely on without knowing your
Actor class:
CanReceiveDestructionHit(Hit)ReceiveDestructionHit(Hit)CanDestroyFromHit(Hit)GetDestructionState()
All four are BlueprintNativeEvent, so a Blueprint Actor can implement them directly. The hit sender
components use this interface to decide whether a target supports destruction, which is what
bTargetSupportsDestruction reports in their delivery results.
Next
Last updated: 2026-09-15