The physics asset could not be made from Python (PhysicsAssetFactory exposes no mesh property), so a small editor-only C++ helper calls FPhysicsAssetUtils::CreateFromSkeletalMesh - the same code path as the editor's Create Physics Asset action. It produces PA_Vehicle_Sedan with 6 bodies and assigns it to SK_Vehicle_Sedan. AGigLineVehicle is a Chaos wheeled pawn that configures its four wheels from the modelled dimensions (radius 33 cm, wheelbase 278, track 156) and is staged in DemoMap. A run logs: spawned at (-12950, -900, 120), 4 wheel setups settled at Z 494 cm, simulating=1, speed=0 cm/s That last line is the defect and it is not hidden: the vehicle rests 3.7 m above the road, so the generated physics bodies do not match the mesh. Recorded in TODO.md with the next step - inspect the bodies against the mesh, then either fix the creation params or author two boxes and four wheel spheres explicitly.
35 lines
1.1 KiB
C++
35 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Kismet/BlueprintFunctionLibrary.h"
|
|
#include "GigLineVehicleBuilder.generated.h"
|
|
|
|
class UPhysicsAsset;
|
|
class USkeletalMesh;
|
|
|
|
/**
|
|
* Script-callable helpers for vehicle setup.
|
|
*
|
|
* Chaos Vehicles need a PhysicsAsset, and Unreal's `PhysicsAssetFactory` exposes no mesh
|
|
* property to Python, so the asset cannot be generated from a commandlet. The body does
|
|
* the job with `FPhysicsAssetUtils::CreateFromSkeletalMesh`, which is the same code path
|
|
* the editor's "Create Physics Asset" action uses.
|
|
*
|
|
* Editor only: it is compiled into the editor target and never shipped.
|
|
*/
|
|
UCLASS()
|
|
class GIGLINE_API UGigLineVehicleBuilder : public UBlueprintFunctionLibrary
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/**
|
|
* Build (or rebuild) a physics asset for `Mesh` at `PackagePath`/`AssetName`.
|
|
*
|
|
* @return the created asset, or nullptr with the reason written to the log.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "GigLine|Vehicle")
|
|
static UPhysicsAsset* BuildPhysicsAsset(USkeletalMesh* Mesh, const FString& PackagePath,
|
|
const FString& AssetName);
|
|
};
|