The reported fall-through was a misdiagnosis: the player never fell. The imported Terrain_DEM had only a bounding-box simple collision proxy, so a downward trace anywhere in the block hit the terrain at Z 819 (the mesh bbox max) and the street sat under an invisible 8 m lid. Standing on that box looked plausible, which is why it read as working. - add UGigLineAssetTools (C++): force CTF_UseComplexAsSimple on a static mesh. UE 5.8 dropped bUseComplexAsSimpleCollision and Python cannot set the flag; the builder also saves the asset, since the flag lives there and a map-only save silently reverts it. - spawn (-13336, -1150, 600): inside the carved corridor (the cut is a 10.7 m half-width around the road centreline), lands on the road at 456. - fix ResetToStart returning to the mid-air PlayerStart captured in BeginPlay: StartLocation is now captured on the first grounded frame. - HighResShot 1280x720 instead of "1280 720", which is a multiplier. - add -qaselftest: scripted walk/reset/pause on a core ticker plus a swept ground transect. Results: walk 746 cm/2 s with Z steady, reset 0 cm from spawn, pause/unpause 1/0, transect 84 samples 0 holes. - rebase onto main, keeping the frontage materials and placement fixes.
35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Kismet/BlueprintFunctionLibrary.h"
|
|
#include "GigLineAssetTools.generated.h"
|
|
|
|
class UStaticMesh;
|
|
|
|
/**
|
|
* Small editor-side helpers for the headless asset pipeline scripts.
|
|
*
|
|
* Exposed to Python so tools can fix up imported meshes that the Interchange
|
|
* importer gives unusable default collision. The terrain is the motivating
|
|
* case: without complex-as-simple it gets a bounding-box proxy, so the whole
|
|
* street sits under an invisible 8 m box and the player walks on the box lid.
|
|
*/
|
|
UCLASS()
|
|
class GIGLINE_API UGigLineAssetTools : public UBlueprintFunctionLibrary
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** Make collision trace against the mesh triangles instead of a proxy hull. */
|
|
UFUNCTION(BlueprintCallable, Category = "GigLine|Assets")
|
|
static void SetComplexCollisionAsSimple(UStaticMesh* Mesh, bool bEnable = true);
|
|
|
|
/** Drop any generated simple collision (hulls/boxes) from the mesh. */
|
|
UFUNCTION(BlueprintCallable, Category = "GigLine|Assets")
|
|
static void ClearSimpleCollision(UStaticMesh* Mesh);
|
|
|
|
/** Report the current collision complexity: "SimpleAndComplex", "Simple", ... */
|
|
UFUNCTION(BlueprintCallable, Category = "GigLine|Assets")
|
|
static FString GetCollisionComplexity(UStaticMesh* Mesh);
|
|
};
|