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

TypeKindRole
FSDFDestructionHitStructThe payload gameplay code sends. Damage, destruction power, impact geometry, source references, tags, seed.
USDFDestructibleComponentActor componentEvaluates a hit against the profile, changes state, drives presentation, returns an explicit result.
USDFDestructionProfileData assetAll the data: health, resistance, presentation mode, audio, VFX, damage stages, decals, loot, propagation.
USDFDestructionSubsystemWorld subsystemWorld-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 by Static and Keep Existing generations and by older setups;
  • ASDFPhysicsDestructibleActor — its subclass for props that simulate. The intact Static Mesh is the Actor’s root and its own collider. New Simulated generations 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. GetLastSupportWakeCount reports 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.Fall that goes through the normal rules. GetLastFallHeightCm and GetLastFallDamage report 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:

StateMeaning
IntactUntouched, full health
DamagedHealth reduced, still standing
BreakingDestruction committed, presentation running
DestroyedDestruction complete
CleaningUpDebris or representation being retired
DisabledNot accepting hits

State changes are broadcast through OnDestructionStateChanged (PreviousState, NewState).

Destruction outcomes

Every call returns an FSDFDestructionResult whose Outcome is one of:

OutcomeMeaning
IgnoredThe hit was not applicable
RejectedBelow the profile’s damage threshold or destruction power gate
ReactedA valid hit that produced a reaction but no damage
DamagedHealth was reduced
DestroyedThe object broke
AlreadyDestroyedThe object was already destroyed
DisabledThe component is disabled
InvalidConfigurationNo 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:

ModeBehaviour
NoneNo visual destruction; the object still changes state
SwapAndScatterHide the intact mesh, spawn bounded debris meshes with directional impulse
GeometryCollectionActivate a Chaos Geometry Collection representation
GlassGenerate 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:

DelegatePayload
OnDestructionDamageReceivedHit, Result
OnDestructionStateChangedPreviousState, NewState
OnDestructionStartedHit, Result
OnDestroyedHit, Result
OnDebrisSpawnedDebrisActor
OnDestructionAudioRequestedFSDFDestructionAudioRequest
OnDestructionVFXRequestedFSDFDestructionVFXRequest
OnHitReactionRequestedFSDFHitReactionRequest
OnDamageStageChangedFSDFDamageStageChange
OnImpactDecalRequestedFSDFDecalRequest
OnLootRequestedFSDFLootRequest

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.

AreaAPI
BudgetsConfigureBudgetLimits, GetBudgetLimits, GetBudgetStats, ResetBudgetStatistics
RadialApplyRadialDestruction, CalculateRadialFalloffMultiplier, CalculateRadialTargetSeed
PropagationCalculatePropagationSeed, GetLastPropagationChainResult, OnPropagationChainCompleted
AudioOnDestructionAudioRequested, GetAudioStats, GetLastAudioRequest, ResetAudioStatistics
VFXOnDestructionVFXRequested, GetVFXStats, GetLastVFXRequest, ResetVFXStatistics
DebrisGetActiveDebrisCount

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

Type to search titles, sections and keywords.