DPT Games Interactive Prop System

A complete solution for destructible objects, openable containers, and dynamic loot drops. Plug-and-play for level designers with a full public API for programmers.

Features

Quick Navigation Reference: Getting Started Inspector Reference Lid / Door Setup Fracture & Destruction Physics Kinetic Transfer Dynamic Loot Configuration Audio, VFX & Events Debug & Testing API Reference Example Integration Troubleshooting Appendix - Prefab Assembly Support & Contract Inquiries

Getting Started

Add the DPT_InteractiveProp component to any GameObject, assign the required references in the Inspector, and you are ready to go. The included prefabs are pre-configured; no setup is required to test them immediately.

Quick Start - Testing in Play Mode

  1. Select a prop in your scene that has the DPT_InteractiveProp component.
  2. Ensure Enable Mouse Interaction is checked at the bottom of the component.
  3. Enter Play Mode.
  4. Left-click the prop to apply damage (50 per click, or instant break if Instant Break On Click is enabled).
  5. Right-click to open the prop. Right-click again to close it.

Default Mouse Controls

InputBehaviour
Left-click Damages the prop. If Instant Break On Click is enabled, the prop shatters immediately. Otherwise, each click applies 50 damage.
Right-click Opens the prop. Right-clicking again closes it, unless the lid has physically detached - in that case, it will not reattach.

Debris Physics Quality Settings

The included prefabs are configured for maximum performance. You can adjust these settings on any debris Rigidbody depending on the visual quality you need.

SettingMaximum PerformanceSmoother / Cinematic
Interpolate None Interpolate
Collision Detection Discrete Continuous Dynamic (recommended for fast-moving shards)
Note: You can also test without entering Play Mode. Use the Shatter, Open, and Reset buttons in the Inspector - the editor will temporarily simulate physics so you can preview destruction behavior directly in Edit Mode.

Inspector Reference

The component is organised into logical groups in the Inspector. Each group is described below. The Inspector is fully dynamic—certain fields and entire sub-sections will only become visible once their parent feature is configured or enabled.

Core Object Setup

The foundational references that wire your GameObjects into the system. These must be assigned before any other settings become meaningful.

FieldDescription
Pristine MeshesThe intact visual meshes. These are automatically hidden when the prop breaks.
Unbroken Collider RootsGameObjects containing the colliders used while the prop is intact.
Broken ParentThe parent GameObject holding all fractured debris. Must be disabled in the hierarchy by default. Assigning this field unlocks the Fracture & Explosion Physics category.
Linked PropsOther DPT_InteractiveProp objects that break automatically when this prop breaks. Useful for destruction chains - barricades, supports, grouped structures. Circular references are safe. All parent objects in the list must have the DPT_InteractiveProps component. You can drag objects into the field, or click Add Selected, or Add Children if all the objects are the child of 1 DPT_InteractiveProps object. Clear all empties the list.
Performance & Bulk Assignment Note: Due to Unity Inspector serialization and layout limitations, dragging and dropping or using Add Selected is optimized for batches of up to ~60 objects at a time. For massive destruction chains exceeding this size, organize the target props under a single parent object and use Add Children to bypass this threshold efficiently.

Base Interaction & Health

Core settings that govern how the prop receives damage, responds to input, and manages its physical state before destruction.

FieldDescription
Max HealthTotal damage the prop can take before shattering.
Instant Break On ClickDebug toggle. When enabled, a single left-click destroys the prop instantly rather than applying 50 damage per click.
Enable Mouse InteractionAllows the prop to be tested with direct mouse input. Left-click to damage, right-click to open/close. Disable this when integrating with your own interaction system. Supports both the Legacy Input Manager and the New Input System.
Start Non-KinematicIf enabled, the intact prop's Rigidbody starts fully simulated from the first frame, allowing gravity and collisions to affect it before destruction.
Lock LOD On OpenForces the LODGroup to LOD 0 while the prop is open, preventing lower-detail meshes from showing closed geometry.
Once you are ready to connect your own player controller or interaction system, disable Enable Mouse Interaction and call the public methods directly. See the API Reference section for details.

Impact Damage Trigger

Controls whether physics collisions can directly damage or destroy the prop.

FieldDescription
Break On ImpactAllows physics collisions to trigger damage and destruction.
Impact Velocity ThresholdThe minimum collision velocity required to register an impact. Only visible when Break On Impact is enabled.

Lid / Door & Openable Setup

Dynamic Visibility - Animation & Physics Settings: All fields in this section are completely hidden until a Transform is assigned to the Lid Or Door slot. Assign a lid or door object first and these settings will appear automatically.

FieldDescription
Lid Or DoorThe Transform of the lid or door object.
Broken Lid ParentOptional parent containing fractured lid debris, activated when the lid detaches.
Lid Detach DistanceHow far the lid can travel from its origin before being considered permanently detached. Once detached, right-clicking will no longer reattach it.
Disable Kinematic On OpenDisables isKinematic on the main root Rigidbody when opened, turning a heavy static container into a lightweight pushable physics object once opened or looted.
Enable Kinematic On CloseIf true, re-enables isKinematic on the main root Rigidbody when the prop is fully closed, turning a pushable object back into an immovable, static world element.
Auto Close After TimeAutomatically closes the prop after a set delay.
Auto Close DelayThe delay in seconds before automatic closure. Only applies when Auto Close After Time is enabled.
Open Position / Rotation OffsetThe target local position and rotation used when animating the lid open.
Open SpeedHow quickly the lid interpolates toward its open position during animation.
Lid Always BreaksIf enabled, the lid always breaks, even if the lid is not near or attached to the parent object.
Use Physics On OpenIgnores animation offsets and instead flings the lid open using physics impulses. Requires a Rigidbody on the lid with appropriate mass, drag, and colliders.
Lid Open Upward ForceUpward impulse force applied to the lid during physics-based opening.
Lid Open Forward ForceForward impulse force applied to the lid during physics-based opening.
Lid Open Sideways ForceSideways impulse force applied to the lid during physics-based opening.
When using physics-based opening, the Rigidbody's mass, drag, angular drag, constraints, and collider shape all directly affect how the lid behaves. Use the Open editor button to preview the result without entering Play Mode.

Fracture & Explosion Physics

Controls how fractured debris behaves at the moment of destruction.
Dynamic Visibility: All fields in this category are completely hidden until a prefab is assigned to the Broken Parent slot in Core Object Setup.

FieldDescription
Broken Base PiecesHeavier debris pieces such as crate bottoms or structural supports. These can be locked in place or given reduced force to feel more grounded.
Lock Base PiecePrevents base pieces from moving on destruction. Useful for anchored structures like barricades.
Explosion ForceThe baseline force applied to all debris on destruction.
Internal Shatter RadiusDefines the absolute physical sphere of influence for the internal explosion force when the object breaks.
Explosion Y OffsetVertically offsets the origin point of the explosion force. Positive values raise the source upward; negative values lower it, allowing you to tune where the blast originates.
Base Force MultiplierScales down the explosion force on base pieces so they feel heavier than smaller debris fragments.
Use Directional ImpactIf enabled, debris is pushed away from the hit point instead of exploding outward from the prop's center.
Directional Impact ForceAdditional force applied in the direction away from the impact point. Only active when Use Directional Impact is enabled.
Debris CleanupHow long debris remains in the scene before cleanup begins.
Time Before CleanupHow long debris remains in the scene before cleanup begins.
Sink SpeedHow quickly debris sinks into the ground during the cleanup phase.
Destroy On CleanupIf enabled, the entire prop GameObject is destroyed after cleanup. If disabled, the prop deactivates itself instead (use for object pooling).
Despawn Base PieceIf disabled, assigned base pieces remain in the scene permanently while smaller debris cleans up as normal.
Show Explosion GizmoDisplays the explosion radius and kinetic transfer radius as wireframe spheres in the Scene view.
Explosion GizmoInner Ring (crimson): Driven by Internal Shatter Radius. Marks the physical blast cutoff.

Outer Disk (translucent orange): Scales dynamically with Explosion Force and the mass values.
When using object pooling, set Destroy On Cleanup to disabled and call ResetProp() on the object before returning it to the pool. This fully restores the prop to its pristine state.

Kinetic Transfer (Nearby Objects)

Allows the prop's destruction to push nearby physics objects, adding physical weight and interactivity to explosions.

FieldDescription
Transfer Kinetic EnergyMaster toggle for nearby object force transfer.
Kinetic Transfer RadiusSearch radius for nearby Rigidbody objects. Visualized as a blue wireframe sphere in the Scene view when Show Explosion Gizmo is enabled.
Kinetic Transfer ForceThe strength of the force applied to nearby objects.
Kinetic Upward ModifierAdds upward lift so nearby objects pop upward rather than only sliding sideways.
Max Pushable MassRigidbodies heavier than this value are ignored, preventing lightweight props from pushing large heavy objects unrealistically.
Warning: Avoid enabling kinetic transfer on large numbers of props simultaneously. Each transfer performs a physics overlap check at destruction time: using it on dozens of props exploding at once will spike CPU cost.

Dynamic Loot Configuration

These settings determine the core logic for how loot items are managed, chosen, and handled physically when a container opens or breaks.

FieldDescription
Loot Mode None - Disables loot entirely.
PreSpawnHidden - Instantiates loot on Start(), places it on the floor, and hides it. Best for performance.
BurstOnEvent - Instantiates and launches the loot at the exact moment the prop opens/breaks.
ManualPlacement - Allows you to link pre-existing objects in your scene to be hidden on start and revealed upon opening.
Drop Loot On OpenIf enabled, loot spawns/reveals when the prop is opened. If disabled, loot only triggers on destruction. Loot can only trigger once per lifecycle regardless (Can be reset in the inspector).
Drop Chance PercentProbability (0-100) that the loot event will happen at all.
Loot Uses Directional ImpactEnable this setting to dynamically blast loot outward from the exact point of impact (overrides the default burst trajectory).

Pool Settings (Visible when Loot Mode is set to PreSpawnHidden or BurstOnEvent)

FieldDescription
Loot PoolPool of potential loot items. A random item from this list will be chosen per individual drop attempt.
Loot CountHow many total loot objects should spawn from the selection pool.
Custom Loot Spawn AreaOptional: Assign a BoxCollider (set as IsTrigger) to strictly confine where loot spawns. If left empty, loot spawns near the center of the prop.
Release Loot Non-KinematicIf true, revealed loot will become non-kinematic and use the physics engine to fall or burst. If false, it remains completely static in the air/on the ground.

Burst Trajectory (Visible when Loot Mode is set to BurstOnEvent only)

FieldDescription
Burst DirectionThe primary Vector3 direction the loot will be thrown (e.g., Up and Forward for a chest). A yellow line will project this in the Scene View.
Burst SpreadSlider (0 to 1) controlling the scatter arc. 0 creates a straight line. 1 creates a full 360-degree spherical scatter.
Loot Burst PowerThe physical force multiplier applied to push the objects outward along the trajectory.

Manual Placement Setup (Visible when Loot Mode is set to ManualPlacement only)

FieldDescription
Manually Placed LootA list of specific GameObjects currently in your scene hierarchy. The script will automatically hide them at startup and reveal them when the container opens/breaks.

Loot Quality & Performance Optimization

Pre-Spawn vs Burst Optimization: Avoid using BurstOnEvent for large numbers of props breaking simultaneously. Instantiating objects and calculating physics forces on the exact same frame causes CPU spikes. For densely packed rooms, set props to PreSpawnHidden to offload the calculations to the scene's startup phase.

FieldDescription
Optimize Loot PhysicsIf true, automatically sets loot rigidbodies to Interpolate and Continuous collision detection to prevent micro-stuttering and clipping through floors.
Cleanup LootIf true, spawned loot items will automatically despawn after a set duration to save memory.
Loot Time Before CleanupTime in seconds before the spawned loot items begin sinking and despawning.
Loot Sink SpeedSpeed at which the loot sinks dynamically through the ground during the cleanup phase.

Audio, VFX & Events

FieldDescription
Break SoundsAn array pool of audio clips. The script randomly selects one to play when the prop shatters.
Open SoundsAn array pool of audio clips. The script randomly selects one to play when the container opens.
Close SoundsAn array pool of audio clips. The script randomly selects one to play when the container closes.
Pitch VariancePitch variance applied to all sounds (open, close, break). Higher values create more acoustic variety.
Particle Shatter VFXOptional particle effect spawned at the prop's position when it breaks.
On Break EventA standard UnityEvent fired when the prop breaks. Wire up any external gameplay logic here.
On Open EventA standard UnityEvent fired when the prop opens. Use it in the same way as On Break Event.
On Close EventA standard UnityEvent fired when the prop closes automatically or via script execution.
The On Break Event and On Open Event foldouts are collapsed by default to save screen space. Click the foldout arrow next to each event in the Inspector to expand it and assign listener functions.

Debug & Testing

Shatter Prop Open Prop Reset Prop
Breaks the prop instantly. In Edit Mode, physics simulate for approximately 2 seconds so you can preview explosion force, debris movement, and kinetic transfer without entering Play Mode. Triggers the opening sequence. If Use Physics On Open is enabled, physics simulate in Edit Mode for approximately 2 seconds so you can preview lid motion and trajectory. Fully restores the prop to its original pristine state, including mesh visibility, lid positions, all debris transforms, health values, and internal physics state.
Use Shatter followed by Reset repeatedly to quickly iterate on explosion force, debris mass, and kinetic transfer settings without touching Play Mode at all.

API Reference

All major interactions are exposed as public methods for integration with custom gameplay systems. Disable Enable Mouse Interaction and call these from your own scripts.

Applying Damage & Breaking

MethodDescription
TakeDamage(float amount, Vector3 hitPoint)Applies the specified damage to the prop. If health reaches zero the prop breaks, using the hit point to calculate directional debris force.
BreakProp()Instantly shatters the prop with a standard outward explosion from its center.
BreakProp(Vector3 hitPoint)Instantly shatters the prop with directional force calculated from the supplied world-space position.

Openable Interactions

MethodDescription
OpenProp()Triggers the full opening sequence including animation or physics impulse, loot spawning if configured, and the On Open UnityEvent.
CloseProp()Returns the lid or door to its original position. Has no effect if the lid has permanently detached.

Utility

MethodDescription
ResetProp()Fully restores the prop to its pristine state. Use this for gameplay resets, level restarts, and returning objects to a pool.
EnsureEditorCache()Caches original transforms, physics references, and internal component data. Runs automatically on Start and during editor test operations. You do not normally need to call this manually.
The system caches its references once during initialization. If you dynamically modify the prop's hierarchy or move debris pieces through code after startup, you will need to call ResetProp() or rebuild the instance manually to restore correct behavior.

Example Integration

Programmer Notes

This section summarises the integration design of the system for developers connecting it to custom gameplay code.

AreaDescription
Public methodsAll major interactions - damaging, breaking, opening, closing, and resetting - are fully exposed as public methods. No reflection or workarounds are needed.
UnityEventsOn Break Event and On Open Event are standard UnityEvents. Wire up any external logic directly in the Inspector without writing additional glue code.
Mouse interactionThe built-in mouse interaction is intended for testing and prototyping only. Disable it before shipping and drive the prop entirely through your own system's calls.
Input systemThe mouse interaction code supports both the Legacy Input Manager and the New Input System via Unity preprocessor directives. No manual configuration is required.

Recommended Methods for External Weapon Systems

When integrating with a custom weapon, ability, or damage system, use these two methods to apply directional force correctly:

// Apply directional damage from a raycast hit
DPT_InteractiveProp prop = hit.collider.GetComponent<DPT_InteractiveProp>();
if (prop != null)
{
    prop.TakeDamage(weaponDamage, hit.point);
}

// Open a chest from an interaction prompt
prop.OpenProp();

// Return to pool after destruction
prop.ResetProp();
objectPool.Return(prop.gameObject);
MethodUse Case
TakeDamage(float amount, Vector3 hitPoint)Use when your system tracks health (e.g., weapons, explosions, traps). The prop handles the health check and breaks automatically when the threshold is reached.
BreakProp(Vector3 hitPoint)Use when you want to bypass health entirely and destroy the prop instantly with realistic directional debris (e.g., scripted events, cutscenes, or one-hit kill abilities).

Compatible Systems

System TypeIntegration Method
Custom player controllersRaycast to find props, call TakeDamage() or OpenProp() directly.
Raycast interaction & loot systemsCall any public method on the DPT_InteractiveProp component returned by the raycast hit.
Quest & progression / InventorySubscribe to On Open Event or On Break Event to trigger item pickup, UI updates, or inventory additions.
AIUse On Break Event to alert nearby AI agents when a prop is destroyed (e.g., heard a noise, investigate position).
Object pooling systemsSet Destroy On Cleanup to disabled, then call ResetProp() before returning the object to the pool.

Troubleshooting

The prop does not respond to clicks
Confirm that Enable Mouse Interaction is checked in the Inspector. Also ensure the prop has a Collider so mouse raycasts can hit it.
Debris flies everywhere immediately on scene load
The Broken Parent object has been left enabled in the hierarchy. It must start disabled. Select it in the Hierarchy and uncheck the active checkbox, then use the Reset button to restore the prop's state.
Debris pieces fall through the floor at the moment of destruction
Debris Rigidbodies are not starting as kinematic. Every debris piece must have Is Kinematic enabled by default so they stay frozen until destruction is triggered. Select all debris pieces and enable Is Kinematic in their Rigidbody components.
The lid does not open or flies off unexpectedly
If using physics-based opening, the lid requires a Rigidbody and valid Collider. Check the mass and drag values - very light objects with no drag will fly off with even small forces. Use the Open editor button to iterate on force values in Edit Mode without entering Play Mode.
The prop resets correctly in the Editor but not at runtime
If you are modifying the prop's hierarchy or moving debris through code after Start, the internal cache will be stale. Call ResetProp() after any dynamic hierarchy changes to rebuild the cache.
Loot spawns every time regardless of Drop Chance
Check that Drop Chance Percent is not set to 100. A value of 100 means loot always drops. Set it to the desired probability between 0 and 100.
Nearby objects are not being pushed on destruction
Ensure Transfer Kinetic Energy is enabled and that the Kinetic Transfer Radius is large enough to reach the objects you want to push. Also check Max Pushable Mass - if nearby objects are heavier than this value, they will be skipped.

Appendix - Custom Prefab Assembly

This section is for advanced users building their own props from scratch. If you are using the prefabs included with this pack, everything is already assembled correctly and you do not need to read this. If you are importing your own fractured meshes from Blender or another tool, every layer of the hierarchy must be configured correctly for the caching and reset system to work.

Required Hierarchy Structure

LayerRequired ComponentsNotes
Root GameObject DPT_InteractiveProp, AudioSource Add an optional Rigidbody only if the intact prop should physically react before destruction (e.g., tipping barricades, pushable crates). Add an optional LODGroup for LOD-enabled assets.
Pristine Visuals Container MeshFilter, MeshRenderer on each child mesh All intact visual meshes live here. LOD0, LOD1, and additional LOD meshes belong inside this container. Lids and doors must NOT be placed here.
Unbroken Colliders Container Collider, Rigidbody If using LODGroups, keep collision geometry separate from visual meshes. For simple props without LODs, the same GameObject can be assigned to both Pristine Meshes and Unbroken Collider Roots.
Broken Parent Container MeshFilter, MeshRenderer, Rigidbody, Collider on every debris piece Must be disabled in the hierarchy by default. Every debris Rigidbody must start with Is Kinematic enabled. MeshColliders must have Convex enabled - Unity cannot simulate non-convex MeshColliders on dynamic Rigidbodies.
Prefer primitive colliders (BoxCollider, SphereCollider, CapsuleCollider) over convex MeshColliders wherever possible. They simulate faster, produce fewer physics artefacts, and are easier to size correctly.

Step-by-Step Assembly

  1. Build the root. Create an empty GameObject and attach the DPT_InteractiveProp script and an AudioSource.
  2. Add pristine visuals. Create a child object named Pristine_Visuals. Place all intact meshes inside it and assign it to the Pristine Meshes array.
  3. Add intact physics. Create a child object named Unbroken_Colliders. Add fitted colliders and a Rigidbody, then assign it to the Unbroken Collider Roots array.
  4. Add debris. Create a child object named Broken_Parent. Import fractured meshes inside it. Ensure every piece has a Rigidbody (Is Kinematic on), a valid Collider, and Mesh Filter / MeshRenderer.
  5. Assign base pieces. If any debris pieces should feel heavy or stay anchored, assign them to the Broken Base Pieces array and enable Lock Base Piece if needed.
  6. Disable and reference. Disable the Broken_Parent object in the Hierarchy and assign it to the Broken Parent field in the Inspector.
  7. Preview. Use the Shatter and Reset editor buttons to test and iterate on destruction behavior directly in Edit Mode.

Common Setup Mistakes

Performance Recommendations

Support & Custom Pipeline Integration

If your project requires external or custom 3D models to be fully integrated into the DPT ecosystem—including custom vertex-data packing, procedural wood grain mapping, normal array configuration, advanced GPU wind system implementation, or any other bespoke features—freelance technical art services are available. Additionally, availability extends to general 3D asset production, high-to-low poly hard surface modeling, stylized prop creation, and game-ready LOD budgeting built to align cleanly with your specific project constraints.

Contact & Inquiries:
For freelance modeling contracts, custom asset optimization passes, standard package bug reports, and publisher licensing enquiries, please use the Contact Form on the DPT Games Hub.
DPT Support Discord:
For dedicated technical assistance, asset configuration help, and direct feedback on our Unity packages, join the Support Server.