test(vehicle): the writer is not in the pawn's tick
Sampled the actor transform immediately before and after Super::Tick on every frame: it never changes there. The 'inside Super::Tick' line never fires, yet the actor climbs 400-1400 cm/s. With the earlier results that leaves exactly one consistent candidate: the Chaos movement component's own tick or its async physics step, outside APawn::Tick. That also explains why SetComponentTickEnabled(false) did not stop the climb and why the body's reported velocity is ~0 while the actor moves - the movement component is writing a transform it took from a vehicle state that was never created. Next step is a subclass of UChaosWheeledVehicleMovementComponent that logs UpdateState / OnUpdateTransform together with the vehicle-state pointer, so the write is caught at its source rather than inferred from the actor.
This commit is contained in:
1 parent
0f059a5c93
commit
348ed1ac69
77 files changed
+95
-76
No files matched your search
@@ -265,8 +265,27 @@ void AGigLineVehicle::BeginPlay()
|
||||
|
||||
void AGigLineVehicle::Tick(float DeltaSeconds)
|
||||
{
|
||||
// Which writer moves the actor? Sample the transform before and after the base class tick:
|
||||
// a change between the two happened inside APawn::Tick (movement component, attachment
|
||||
// update, animation), a change between this frame's exit and the next frame's entry came
|
||||
// from somewhere else entirely.
|
||||
const FVector BeforeSuper = GetActorLocation();
|
||||
|
||||
Super::Tick(DeltaSeconds);
|
||||
|
||||
const FVector AfterSuper = GetActorLocation();
|
||||
if (!AfterSuper.Equals(BeforeSuper, 1.0))
|
||||
{
|
||||
static float LoggedThisPhase = -1.0f;
|
||||
if (SettleElapsed - LoggedThisPhase > 0.25f)
|
||||
{
|
||||
LoggedThisPhase = SettleElapsed;
|
||||
UE_LOG(LogTemp, Warning,
|
||||
TEXT("GigLine vehicle writer: inside Super::Tick %.0f -> %.0f (dz %.0f)"),
|
||||
BeforeSuper.Z, AfterSuper.Z, AfterSuper.Z - BeforeSuper.Z);
|
||||
}
|
||||
}
|
||||
|
||||
// One settled-state report: proves the physics body exists, is simulating, and has
|
||||
// come to rest on the road rather than falling through it. Everything else about the
|
||||
// driving behaviour is measured later; this is the "is it real" check.
|
||||
|
||||
Reference in new issue
Block a user