Is the "Physics Control Asset" feature broken?

Hi everyone,

I have used Physics Control a lot in the past, but only recently learned about the Physics Control Asset and it’s editor. Right now I find it unusable. I can’t assign a skeletal mesh through the UI and have to copy-paste the reference of a skeletal mesh asset. I setup the controls in the same way I would do it manually using the “Create Controls and Body Modifiers from Limb Bones” node. But every time I try to simulate my editor crashes:

LoginId:722d962f4bcfa74d81ebd39a0f703527
EpicAccountId:19a03d59831846dfad48ac6383b11a01

Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Containers\Array.h] [Line: 1067]
Array index out of bounds: -1 into an array of size 220

UnrealEditor_Core
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_UnrealEd
UnrealEditor_PhysicsControlEditor
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_UnrealEd
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Core
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Persona
UnrealEditor_UnrealEd
UnrealEditor_Engine
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
kernel32
ntdll

Hey bro, don’t know if you have resolve the problem? If you check the source code, you might see this:

USkeletalMesh* UPhysicsControlAsset::GetPreviewMesh() const
{
    if (UPhysicsAsset* PA = GetPhysicsAsset())
    {
        return PA->GetPreviewMesh();   
    }
    return nullptr;                     
}

So, the preview mesh is not what you can set, it’s got from PhysicsAseet. You should set PhysicsAsset first(the PA must have PrevieMesh), then Reload the PCA, you may see the PreviewMesh has set automatically

Hi @hGosling,

Thanks for posting in the Unreal Engine community forums!

The Physics Control Component and its accompanying Physics Control Asset Editor (experimental/beta tool added in UE 5.3, improved in 5.4+) are indeed absolutely excellent tools for procedurally driven ragdolls and physics animation, but the UI behavior you’re describing followed by an out-of-bounds assertion failure crash points to a case of mismatched reference between internal skeletal setup within the asset and active editor viewport runtime.

Investigating Crash

Looking at your crash callstack:
Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:…\Containers\Array.h] [Line: 1067]
Array index out of bounds: -1 into an array of size 220

Index of -1 for an array represents a failure state of INDEX_NONE. In this case, it means the editor is unable to find bone, physics body instance or modifier index of targeted SkeletalMesh or PhysicsAsset for which corresponding string name or bone hierarchy index could not be found.

Since you noted:

You could not assign the Skeletal Mesh via the UI picker directly and had to copy-paste the reference.

The crash happens right after you start Simulation.

The editor UI did not validate the mesh asset assignment correctly. Using copy-paste method of assigning the reference allows you to bypass the UI validation and leaves internal bone cache arrays uninitialized or mismatched to the default Physics Asset. When you start simulation, UnrealEditor_PhysicsControlEditor tries to access the bone hierarchy through the Create Controls and Body Modifiers from Limb Bones and tries to access bone index -1 causing assertion crash.

Step-by-Step Solution and Workaround
In order to resolve the issue and prevent the editor crash, you should do the following:

Step 1: Correct and Re-assign Mesh References
Close the Physics Control Asset Editor.

Open your targeted Skeletal Mesh in Persona Editor.

Assign the Physics Asset manually inside the Skeletal Mesh details panel in Asset Details > Physics > Physics Asset.

Reopen your Physics Control Asset.

Delete the previously copied Skeletal Mesh reference.

Do not use copy-paste, use the Use Selected Asset from Content Browser arrow button in the Physics Control Asset details panel and pick the Skeletal Mesh from Content Browser.

Step 2: Check or Recreate Physics Asset Profiles
If you needed to use copy-paste because the UI was filtering out your mesh, your Skeletal Mesh may not have a proper physics bodies or bone names that are required for limb setup node:

Open your Physics Asset.

Make sure that all major limb chains (Spine, Arms, Legs) have collision bodies assigned.

Save the Physics Asset and assign it to the Skeletal Mesh.

Step 3: Verify Limb Setup Names
For using Create Controls and Body Modifiers from Limb Bones setup node:

Make sure that the names of bones used in your control profile matches the names in the active Skeletal Mesh skeleton hierarchy precisely (case-sensitive).

If you are using custom bone names or any skeleton other than Manny or Quinn, recreate the list of limb bones manually.

Official Documentation: Physics Control Component Overview in Unreal Engine
Video Tutorial: Physics Control Component

Let me know if re-assigning the Physics Asset resolves the crash or if you need further assistance debugging your bone hierarchy!