test(vehicle): not the mover, not an overlap - the writer stays unnamed

Two more probes, both negative:

  --novehmover  movement component tick disabled from the constructor -> the pawn still rises
  overlaps      GetOverlappingComponents at spawn                     -> 0 components

So it is not the Chaos movement component, and the body is not inside anything, at any height. With the
velocity clamped to zero, the mover disabled, zero overlaps and a correct dynamic body, the transform is
still written every frame - in DemoMap only.

That is the limit of targeted probing. The remaining path is systematic rather than clever: rebuild DemoMap
in a fresh empty level and add one group of staged content at a time, running the pawn profile after each,
until it starts rising. Five or six runs name the actor or mesh; guessing at engine internals has not, in
ten probes.

The probes stay in the tree as switches: -probes (all diagnostics), -novehmover, -profile, plus the velocity
clamp and overlap list. They cost nothing when unused.
This commit is contained in:
zwitschi committed 2026-11-09 22:14:53 +01:00
1 parent 387a4530de
commit 410d924403
77 files changed
+110 -76

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -47,6 +47,16 @@ AGigLineVehicle::AGigLineVehicle(const FObjectInitializer& ObjectInitializer)
{
PrimaryActorTick.bCanEverTick = true;
// Test: if disabling the movement component's tick stops the rise, the component is the writer.
if (FParse::Param(FCommandLine::Get(), TEXT("novehmover")))
{
if (UChaosVehicleMovementComponent* Mover = FindComponentByClass<UChaosVehicleMovementComponent>())
{
Mover->SetComponentTickEnabled(false);
Mover->Deactivate();
}
}
if (USkeletalMeshComponent* Body = GetMesh())
{
static ConstructorHelpers::FObjectFinder<USkeletalMesh> MeshFinder(
@@ -370,6 +380,30 @@ void AGigLineVehicle::Tick(float DeltaSeconds)
}
}
// Name what the body is actually inside. A single huge collision proxy somewhere in this map
// would explain a positional push at any height.
{
static bool bOverlapLogged = false;
if (!bOverlapLogged && SettleElapsed > 0.3f)
{
bOverlapLogged = true;
if (USkeletalMeshComponent* Body = GetMesh())
{
TArray<UPrimitiveComponent*> Overlaps;
Body->GetOverlappingComponents(Overlaps);
FString List;
for (const UPrimitiveComponent* Comp : Overlaps)
{
List += FString::Printf(TEXT("%s/%s "),
Comp->GetOwner() ? *Comp->GetOwner()->GetName() : TEXT("?"),
*Comp->GetName());
}
UE_LOG(LogTemp, Warning, TEXT("GigLine vehicle overlaps: %d [%s]"),
Overlaps.Num(), *List);
}
}
}
// Velocity profile: an impulse shows as a spike at t=0, a force as steady growth.
{
static float NextSample = 0.0f;