Description

When SimulatePhysics is disabled, the constraint update is skipped, so a reference to an invalid (already-removed) particle is left behind.

As a workaround, the approach suggested by the licensee — clearing the invalid particle references from the GroundParticles array inside DisconnectConstraints — was confirmed to work.

Steps to Reproduce
  1. Set up a vehicle using the ChaosVehiclePlugin and place it on a floor mesh
  2. Start PIE
  3. Once the vehicle is stable on a floor mesh, disable SimulatePhysics
  4. Delete the floor mesh

Result:

The following assert is triggered and the engine crashes: (also see call stack)

Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:D:\dev\UnrealEngine-5.8.1\Engine\Source\Runtime\Core\Public\Containers\Array.h] [Line: 1339] 
Array index out of bounds: -1 into an array of size -11990752
Callstack

[Inline Frame] UnrealEditor-Chaos.dll!TArray<Chaos::FRigidParticleCoreData,TSizedDefaultAllocator<32>>::RangeCheck(int) Line 1339 C++
[Inline Frame] UnrealEditor-Chaos.dll!TArray<Chaos::FRigidParticleCoreData,TSizedDefaultAllocator<32>>::operator Line 1417 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::TRigidParticles<double,3>::ObjectState(const int) Line 277 C++
UnrealEditor-Chaos.dll!Chaos::TPBDRigidParticleHandleImp<double,3,1>::ObjectState() Line 1276 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::TKinematicGeometryParticleHandleImp<double,3,1>::ObjectState() Line 1742 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::TGeometryParticleHandleImp<double,3,1>::ObjectState() Line 1735 C++
UnrealEditor-Chaos.dll!Chaos::Private::IsParticleDynamic(const Chaos::TGeometryParticleHandleImp<double,3,1> * Particle) Line 174 C++
UnrealEditor-Chaos.dll!Chaos::Private::FPBDIslandManager::CreateGraphEdge(const int ContainerId, Chaos::FConstraintHandle * Constraint, const Chaos::TVector<Chaos::TGeometryParticleHandleImp<double,3,1> *,2> & ConstrainedParticles) Line 1309 C++
UnrealEditor-Chaos.dll!Chaos::Private::FPBDIslandManager::AddConstraint(const int ContainerId, Chaos::FConstraintHandle * Constraint, const Chaos::TVector<Chaos::TGeometryParticleHandleImp<double,3,1> *,2> & ConstrainedParticles) Line 1050 C++
UnrealEditor-Chaos.dll!Chaos::FPBDSuspensionConstraints::AddConstraintsToGraph(Chaos::Private::FPBDIslandManager & IslandManager) Line 191 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FPBDRigidsEvolutionBase::CreateConstraintGraph() Line 945 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsEvolutionGBF::AdvanceOneTimeStepImpl(const double Dt, const Chaos::FSubStepInfo & SubStepInfo) Line 697 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsEvolutionGBF::AdvanceOneTimeStep(const double Dt, const Chaos::FSubStepInfo & SubStepInfo) Line 417 C++
UnrealEditor-Chaos.dll!Chaos::AdvanceOneTimeStepTask::DoWork() Line 592 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsSolver::AdvanceSolverBy(const Chaos::FSubStepInfo & SubStepInfo) Line 1529 C++
UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverAdvanceTask::AdvanceSolver() Line 255 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverAdvanceTask::DoTask(ENamedThreads::Type) Line 216 C++
UnrealEditor-Chaos.dll!TGraphTask[Chaos::FPhysicsSolverAdvanceTask|Chaos::FPhysicsSolverAdvanceTask]::ExecuteTask() Line 703 C++
UnrealEditor-Chaos.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 524 C++
[Inline Frame] UnrealEditor-Chaos.dll!UE::Tasks::Private::FTaskBase::Init::__l2::<lambda_1>::operator()() Line 186 C++
[Inline Frame] UnrealEditor-Chaos.dll!LowLevelTasks::FTask::Init::__l15::<lambda_1>::operator()(const bool) Line 495 C++
[Inline Frame] UnrealEditor-Chaos.dll!Invoke(LowLevelTasks::FTask::Init::__l15::<lambda_1> &) Line 46 C++
[Inline Frame] UnrealEditor-Chaos.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<{{LowLevelTasks::FTask::Init<}}UE::Tasks::Private::FTaskBase::Init'::{{2'::<lambda_1>>'::}}15'::<lambda_1>,0>::Call(void *) Line 162 C++
UnrealEditor-Chaos.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<{{LowLevelTasks::FTask::Init<}}UE::Tasks::Private::FTaskBase::Init'::{{2'::<lambda_1>>'::}}15'::<lambda_1>,0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 309 C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 623 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * InTask) Line 403 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 704 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 802 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool) Line 861 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda_1>::operator()() Line 223 C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 414 C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69 C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 167 C++
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 79 C++
kernel32.dll!00007ff82a2ae957() Unknown
ntdll.dll!00007ff82c5aad6c() Unknown

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-394517 in the post.

0
Login to Vote

Unresolved
Affects Versions5.8
CreatedSep 1, 2026
UpdatedSep 1, 2026
View Jira Issue