test(vehicle): the body barely moves, so something else moves the actor

The motion probe splits the problem in two:

  velocity  -24, -182, -28 cm/s     (a body that cannot climb 9 m in 1.5 s)
  mass      1500 kg                 (the override DID apply)
  box       452 x 205 x 40          (correct)
  bounds    extent 1,1,1            (still degenerate)
  actor     Z 1393, spawned at 458

The physics body is nearly still while the actor is nine metres above its spawn. So this is not a
force problem at all - it is a transform problem: something writes the actor's transform that is
neither the body's velocity nor our code, which is also what the degenerate bounds are telling us from
the other side.

Next: find who writes that transform. Suspects are the Chaos movement component's UpdateState /
OnUpdateTransform and the component hierarchy - a pawn whose root is the mesh while the physics state
belongs elsewhere behaves exactly like this.

Pawn parked again so the demo stays clean.
This commit is contained in:
zwitschi committed 2026-11-09 21:34:22 +01:00
1 parent 2ecd029cc0
commit 14ed01a4e6
77 files changed
+87 -77

No files matched your search

@@ -339,6 +339,16 @@ void AGigLineVehicle::Tick(float DeltaSeconds)
B.Origin.X, B.Origin.Y, B.Origin.Z, B.BoxExtent.X, B.BoxExtent.Y, B.BoxExtent.Z);
}
UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle geometry: %s | %s"), *BoxInfo, *BoundsInfo);
if (Body)
{
const FVector Vel = Body->GetPhysicsLinearVelocity();
const FVector Angular = Body->GetPhysicsAngularVelocityInDegrees();
UE_LOG(LogTemp, Warning,
TEXT("GigLine vehicle motion: velocity %.0f,%.0f,%.0f angular %.0f,%.0f,%.0f "
"mass %.0f sim=%d kinematic=%d"),
Vel.X, Vel.Y, Vel.Z, Angular.X, Angular.Y, Angular.Z, Body->GetMass(),
Body->IsSimulatingPhysics() ? 1 : 0, Body->IsAnySimulatingPhysics() ? 1 : 0);
}
{
const USkeletalMesh* Asset = Body ? Body->GetSkeletalMeshAsset() : nullptr;
UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle mesh asset: %s"),