feat(debug): -probes quits after measuring, so a ground check takes 14 s not minutes
The ground measurement was the slowest part of every iteration: the game ran until the shell's timeout because nothing told it to stop. -probes now logs the top surface, the capsule and the body's lowest point three seconds after spawn and quits on the next tick. A run went from minutes to 13.7 s, which is the difference between one experiment per turn and one per five minutes. Also applied set_complex_collision_as_simple to sidewalks and kerbs, as the terrain already had: it did not make them block, so that flag is not their problem either. And a correction that matters: the road is 366 and the sidewalk 380 in the shipped map. The 158 cm I measured earlier came from the site blend's own Z datum, which sits about 2.2 m below the map's because the terrain was added after that blend was written. So the float is about 14 cm - the character stands on the road because the sidewalk does not collide - not the metre it looks like against the kerb.
This commit is contained in:
1 parent
1916321761
commit
e50f620aa3
84 files changed
+171
-142
No files matched your search
@@ -344,6 +344,10 @@ void AGigLineCharacter::BeginPlay()
|
||||
// Visibility trace reports ground at 366, so at least one channel is seeing a different
|
||||
// surface than the one under foot. This names the actor and the Z for each channel.
|
||||
// Foot-contact probe runs from Tick three seconds after spawn — see LogFootProbes().
|
||||
// `-probes` runs the ground probes and then quits: the measurements fire three seconds
|
||||
// after spawn, so a run needs seconds, not minutes. Without the switch the game keeps
|
||||
// running for the capture pipeline.
|
||||
bProbeAndQuit = FParse::Param(FCommandLine::Get(), TEXT("probes"));
|
||||
FootProbeDelay = 3.0f;
|
||||
|
||||
bWalkForever = FParse::Param(FCommandLine::Get(), TEXT("walk"));
|
||||
@@ -1041,6 +1045,17 @@ void AGigLineCharacter::Tick(float DeltaSeconds)
|
||||
if (FootProbeDelay <= 0.f)
|
||||
{
|
||||
LogFootProbes();
|
||||
if (bProbeAndQuit && GetWorld())
|
||||
{
|
||||
// One frame later, so the log lines are flushed before the process exits.
|
||||
GetWorld()->GetTimerManager().SetTimerForNextTick([this]()
|
||||
{
|
||||
if (APlayerController* PC = Cast<APlayerController>(GetController()))
|
||||
{
|
||||
PC->ConsoleCommand(TEXT("quit"));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +210,9 @@ protected:
|
||||
UPROPERTY()
|
||||
TObjectPtr<class AStaticMeshActor> CameraTestWall;
|
||||
|
||||
/** `-probes`: log the ground measurements, then quit. */
|
||||
bool bProbeAndQuit = false;
|
||||
|
||||
/** Seconds until the foot-contact probe runs; 0 disables it. */
|
||||
float FootProbeDelay = 0.f;
|
||||
void LogFootProbes();
|
||||
|
||||
Reference in new issue
Block a user