OnConstraintBroken not called after BreakConstraint

Unreal Engine 4.26.1
commit: 5df54b7ef1714f28fb5da319c3e83d96f0bedf08

To demonstrate this I created a scene with a cube constrained above another cube. If it hits the ground and breaks the constraint, it fires the event, and prints “Constraint Broken Event Fired”

Calling BreakConstraint before the cube hits the ground only shows the “Performing Test” string. The constraint breaks but the event isn’t fired.

The test blueprint is a function that is marked as “Call in Editor”.

The constraint event is on the Event Graph of the same blueprint.

A workaround is to directly call the code following the event when performing a break. But the documentation does not mention that the OnConstraintBroken event is only called when the constraint breaks through forces, and not when broken through BreakConstraint.

My expectation was that the source of the break wouldn’t matter, or that the name or documentation would clarify the distinction.

4 Likes

I am also getting a similar error. Except in my project the event doesn’t fire when there is a linear break either. I am currently setting up everything through blueprints so the Physics Component is set and manually broken through the blueprint numerous times, but it can also be broken through a linear break. I am also setting up the event exactly as the user above.

In an attempt to work around this issue I have also checked the “Is Broken” node in a “Event Tick”. But no matter if the link is connected or broken it will always return “false”. This happens if I either break it myself or if it is broken from a linear force.

In either of these situations I can’t get the event to fire either when I manually break it or when I break it from a linear force.

1 Like

I am still having the same issue in 5.2, this was never fixed

2 Likes

This is my problem in 5.4, any solution?

1 Like

I have been testing with force breakage in 5.3 and it is not telegraphing that it has been broken.

From Chat: Ah, the classic “Is Broken” not updating” issue in UE5’s Physics Constraints — I’ve seen that trip up a lot of developers.

Here’s why it happens and how you can fix or work around it:


:wrench: Why “Is Broken” Might Not Be Working:

  1. Constraint is still technically “intact” in the engine’s eyes even if visually it looks broken (e.g., components flying apart due to a force).
  2. You may be using manual constraint break or setting properties like ConstraintInstance.TermConstraint() — these do not always update the IsBroken boolean the way physical breaking does.
  3. “Is Broken” only updates when the constraint is broken by physics (e.g., exceeding linear or angular break thresholds set on the constraint).

:white_check_mark: Checklist to Make It Work Properly:

1. Enable Constraint Breaking:

Make sure you’ve enabled the constraint to actually break based on thresholds:

plaintext

CopyEdit

In the Constraint Component:
✔️ Enable “Breakable”
🛠️ Set “Linear Break Threshold” or “Angular Break Threshold” to something reasonable

If you set it too high, it may never “technically” break.


2. Do Not Use Manual Break if You Rely on IsBroken

If you manually break the constraint via code like:

cpp

CopyEdit

ConstraintComp->BreakConstraint();

or

cpp

CopyEdit

ConstraintComp->ConstraintInstance.TermConstraint();

That will not set IsBroken to true — because it skips the internal break logic Unreal uses to monitor that flag.

:stop_sign: Solution: Set your own boolean to track manual breaks.


3. Use Blueprint Alternative to Detect Breaks:

If you need runtime detection:

  • In the constraint component, go to Details → Events → On Constraint Broken (available in Blueprints).
  • Bind a custom event to this — this is the most reliable way to track when physics breaks it.

blueprint

CopyEdit

OnConstraintBroken → Custom Event → Set “IsMyBreakHappened” = true

:test_tube: Debug Tip:

Use Print String to output the value of Is Broken every tick (just for testing), and apply increasing force. If it never changes, the constraint isn’t breaking the way UE expects.


:white_check_mark: Workaround Summary:

If you manually break the constraint, you’ll need to track the broken state yourself. Only physics-based breaking will update Is Broken.

Want help wiring this up in Blueprint with a working OnConstraintBroken event? I can send you screenshots.

You just pasted an AI response verbatim, didn’t you?

Neither the ‘solution’ nor the workaround suggested actually provide an event or a function call (in the case of my suggested workaround).