Physics when TickPhysicsAsync is enabled is not accurate.

I found a solution myself. GetComponentLocation should not be used when the location of the component is required. This does not bring the position of the substep, but simply brings the position of the tick, resulting in an error. Instead, you need to get the position directly from the rigid body. This ensures stable operation even if the graphic fps is 1.

Chaos::FRigidBodyHandle_Internal* RigidBody = Parent->BodyInstance.ActorHandle->GetPhysicsThreadAPI();
FTransform ParentTransform = FTransform(RigidBody->R(), RigidBody->X());
FVector ComponentLocation = ParentTransform.TransformPosition(GetRelativeLocation());
FRotator ComponentRotation = ParentTransform.TransformRotation(GetRelativeRotation().Quaternion()).Rotator();

Component Location and Component Rotation are now the true position and rotation.

4 Likes