Why is physics in UE5 so useless? All I want to do is check if a physics constraint is broken but it always returns false, basic stuff like this not even working

All I’m trying to do is break a constraint (which works fine, the attached object falls) but then when I check if the constraint is broken it always returns false. This is easy to reproduce as there’s not much happening here.

2 Likes

After doing more tests it seems the physics constraint will only return broken if the constraint was broken by a physical force not manually in the BP using BreakConstraint

2 Likes

I have been testing with force breakage in 5.3 and it is not working. I cannot get the “Is Broken” to fire no matter what i do, Chat gave a great idea to use the Event and it does work.

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.