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:
1 parent
387a4530de
commit
410d924403
77 files changed
+110
-76
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user