The licensee found a way to lock the state of a rigidbody as PBDRigid->ObjectState() == EObjectStateType::Sleeping by subjecting it to a particular transient field composed of a RadialFalloff and a RadialVector. The transient field is set as Physics Type> Linear Force. Once the rigidbody sleeps under it's area of influence, it never wakes up, even if the field is moved away from the rigidbody. Please check the repro project.
I didn't hit this while debugging but found this comment on PBDRigidsSOAs.h about setting sleep in two places:
void DeactivateParticle(...)
...
// Sleeping state is currently expressed in 2 places...
PBDRigid->SetSleeping(true);
PBDRigid->SetObjectStateLowLevel(EObjectStateType::Sleeping);
The comment suggests this might be an issue.
To reproduce the problem:
Use the repro project
'Simulate' the scene
Move the Red Wireframe Sphere called BP_FieldSystemActorRadial over onto one of the two spheres in the center
Doing so will change the sphere's color to orange, indicating it's awake
Now move BP_FieldSystemActorBase over one of the two spheres
Nothing should happen -
Then move BP_FieldSystemActorBase somewhere away from the sphere, and move BP_FieldSystemActorRadial (the red wireframe sphere) onto the sphere instead
In this case, the sphere's color should remain white, indicating that it's still asleep
Opening up either BP_FieldSystemActorRadial & BP_FieldSystemActorBase will show you how the Transient Fields are set up
Call stack for the behavior, non-fatal:
> UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::DispatchFieldCommand(const FFieldSystemCommand & InCommand, const bool IsTransient) Line 150 C++
UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::BuildFieldCommand(bool Enabled, EFieldPhysicsType Target, UFieldSystemMetaData * MetaData, UFieldNodeBase * Field, const bool IsTransient) Line 285 C++
[Inline Frame] UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::ApplyPhysicsField(bool Target, EFieldPhysicsType) Line 387 C++
UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::execApplyPhysicsField(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 337 C++
UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 6847 C++
UnrealEditor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 1139 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 3086 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1206 C++
UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void ({}cdecl*)(UObject *,FFrame &,void *)>(UObject * Context, UFunction * Function, FFrame & Stack, void * const Z_Param{_}_Result, void[Image Removed](UObject *, FFrame &, void *) ExecFtor) Line 1039 C++
UnrealEditor-CoreUObject.dll!ProcessLocalFunction(UObject * Context, UFunction * Fn, FFrame & Stack, void * const Z_Param__Result) Line 1276 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1206 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessInternal(UObject * Context, FFrame & Stack, void * const Z_Param__Result)
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-223571 in the post.
0 |
Component | UE - Simulation - Physics |
---|---|
Affects Versions | 5.4.3 |
Created | Sep 5, 2024 |
---|---|
Updated | Sep 11, 2024 |