UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BodySetup.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "UObject/Object.h"
8#include "Misc/Guid.h"
9#include "EngineDefines.h"
12#include "BodySetupEnums.h"
15#include "HAL/ThreadSafeBool.h"
17#include "BodySetupCore.h"
18#if WITH_EDITOR
19#include "Factories.h"
20#endif
21#include "BodySetup.generated.h"
22
23class ITargetPlatform;
26class UPrimitiveComponent;
27struct FShapeData;
28enum class EPhysXMeshCookFlags : uint8;
29
31
32namespace Chaos
33{
34 class FImplicitObject;
35 class FTriangleMeshImplicitObject;
36 struct FCookHelper;
37}
38
39template<typename T, int d>
41
43
44
69
114
115struct FPhysXCookHelper;
116
126UCLASS(collapseCategories, MinimalAPI)
128{
130
131
132 UBodySetup(FVTableHelper& Helper);
133
134 virtual ~UBodySetup();
135
137 UPROPERTY(EditAnywhere, Category = BodySetup, meta=(DisplayName = "Primitives", NoResetToDefault))
138 struct FKAggregateGeom AggGeom;
139
144 UPROPERTY()
145 uint8 bAlwaysFullAnimWeight_DEPRECATED:1;
146
151 UPROPERTY(EditAnywhere, Category=BodySetup)
152 uint8 bConsiderForBounds:1;
153
159 uint8 bMeshCollideAll:1;
160
165 UPROPERTY(EditAnywhere, Category=Physics)
166 uint8 bDoubleSidedGeometry : 1;
167
169 UPROPERTY()
170 uint8 bGenerateNonMirroredCollision:1;
171
173 UPROPERTY()
174 uint8 bSharedCookedData : 1;
175
180 UPROPERTY()
181 uint8 bGenerateMirroredCollision:1;
182
187 UPROPERTY()
188 uint8 bSupportUVsAndFaceRemap:1;
189
191 uint8 bCreatedPhysicsMeshes:1;
192
194 uint8 bFailedToCreatePhysicsMeshes:1;
195
197 uint8 bHasCookedCollisionData:1;
198
204 UPROPERTY(EditAnywhere, Category = Collision)
205 uint8 bNeverNeedsCookedCollisionData:1;
206
208 UPROPERTY(EditAnywhere, Category=Physics, meta=(DisplayName="Simple Collision Physical Material"))
210
212 UPROPERTY(EditAnywhere, AdvancedDisplay, Category=Physics)
213 struct FWalkableSlopeOverride WalkableSlopeOverride;
214
215#if WITH_EDITORONLY_DATA
216 UPROPERTY()
217 float BuildScale_DEPRECATED;
218#endif
219
221 FFormatContainer CookedFormatData;
222
223#if WITH_EDITORONLY_DATA
230#endif
231
233 FGuid BodySetupGuid;
234
237
239 FBodySetupUVInfo UVInfo;
240
242 TArray<int32> FaceRemap;
243
245 UPROPERTY(EditAnywhere, Category=Collision, meta=(FullyExpand = "true"))
246 FBodyInstance DefaultInstance;
247
249 FFormatContainer* CookedFormatDataOverride;
250
252 UPROPERTY()
253 FVector BuildScale3D;
254
257 FAsyncCookHelper* CurrentCookHelper;
258
259 // Will contain deserialized data from the serialization function that can be used at PostLoad time.
260 TUniquePtr<FChaosDerivedDataReader<float, 3>> ChaosDerivedDataReader;
261
262 UE_DEPRECATED(5.4, "Please use TriMeshGeometries instead")
264
265public:
266 //~ Begin UObject Interface.
267 virtual void Serialize(FArchive& Ar) override;
268 virtual void BeginDestroy() override;
269 virtual void FinishDestroy() override;
270 virtual void PostLoad() override;
271 virtual void PostInitProperties() override;
272#if WITH_EDITOR
273 virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
274 virtual void PostEditUndo() override;
275 virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
276#endif // WITH_EDITOR
277 virtual void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) override;
278 //~ End UObject Interface.
279
280 //
281 //~ Begin UBodySetup Interface.
282 //
283 ENGINE_API void CopyBodyPropertiesFrom(const UBodySetup* FromSetup);
284
286 ENGINE_API void AddCollisionFrom(class UBodySetup* FromSetup);
287 ENGINE_API void AddCollisionFrom(const FKAggregateGeom& FromAggGeom);
288 ENGINE_API bool AddCollisionElemFrom(const FKAggregateGeom& FromAggGeom, const EAggCollisionShape::Type ShapeType, const int32 ElemIndex);
289
292 ENGINE_API virtual void CreatePhysicsMeshes();
293
298
300 ENGINE_API void AbortPhysicsMeshAsyncCreation();
301
303 {
304 NoError,
305 FailedToLock,
306 FailedToCook
307 };
308
314
315private:
316 FByteBulkData* GetCookedFormatData();
317
324 FByteBulkData* GetCookedData(FName Format);
325
332 FBodySetupTryCookResult TryGetCookedData(FName Format);
333
334 // #TODO MRMesh for some reason needs to be able to call this - that case needs fixed to correctly use the create meshes flow
335 friend class UMRMeshComponent;
336 bool ProcessFormatData_Chaos(FByteBulkData* FormatData);
337 bool ProcessFormatData_Chaos(FChaosDerivedDataReader<float, 3>& Reader);
338 bool RuntimeCookPhysics_Chaos();
339 void FinishCreatingPhysicsMeshes_Chaos(FChaosDerivedDataReader<float, 3>& InReader);
340 void FinishCreatingPhysicsMeshes_Chaos(Chaos::FCookHelper& InHelper);
341 void FinishCreatingPhysicsMeshes_Chaos(TArray<Chaos::FConvexPtr>& InConvexImplicits,
345
352
353public:
354
360 void GetGeometryDDCKey(FString& OutString) const;
361
363 UE_DEPRECATED(5.1, "Use GetScaledVolume which uses the same scaling technique as the generated collision geometry")
364 ENGINE_API virtual float GetVolume(const FVector& Scale) const;
365
367 ENGINE_API virtual FVector::FReal GetScaledVolume(const FVector& Scale) const;
368
370 ENGINE_API void ClearPhysicsMeshes();
371
373 ENGINE_API virtual float CalculateMass(const UPrimitiveComponent* Component = nullptr) const;
374
376 ENGINE_API class UPhysicalMaterial* GetPhysMaterial() const;
377
379 ENGINE_API void RemoveSimpleCollision();
380
386 ENGINE_API void RescaleSimpleCollision( FVector BuildScale );
387
389 ENGINE_API virtual void InvalidatePhysicsData();
390
400 ENGINE_API bool CreateFromModel(class UModel* InModel, bool bRemoveExisting);
401
407 ENGINE_API void UpdateTriMeshVertices(const TArray<FVector> & NewPositions);
408
418 ENGINE_API float GetShortestDistanceToPoint(const FVector& WorldPosition, const FTransform& BodyToWorldTM, bool bUseConvexShapes = false) const;
419
431 ENGINE_API float GetClosestPointAndNormal(const FVector& WorldPosition, const FTransform& BodyToWorldTM, FVector& ClosestWorldPosition, FVector& FeatureNormal, bool bUseConvexShapes = false) const;
432
439
444 bool CalcUVAtLocation(const FVector& BodySpaceLocation, int32 FaceIndex, int32 UVChannel, FVector2D& UV) const;
445
446
447#if WITH_EDITOR
448 ENGINE_API virtual void BeginCacheForCookedPlatformData( const ITargetPlatform* TargetPlatform ) override;
449 ENGINE_API virtual bool IsCachedCookedPlatformDataLoaded( const ITargetPlatform* TargetPlatform ) override;
450 ENGINE_API virtual void ClearCachedCookedPlatformData( const ITargetPlatform* TargetPlatform ) override;
451
452 /*
453 * Copy all UPROPERTY settings except the collision geometry.
454 * This function is use when we restore the original data after a re-import of a static mesh.
455 * All FProperty should be copy here except the collision geometry (i.e. AggGeom)
456 */
458#endif // WITH_EDITOR
459
463 ENGINE_API void AddShapesToRigidActor_AssumesLocked(
465 FVector& Scale3D,
466 UPhysicalMaterial* SimpleMaterial,
467 TArray<UPhysicalMaterial*>& ComplexMaterials,
468 TArray<FPhysicalMaterialMaskParams>& ComplexMaterialMasks,
470 const FTransform& RelativeTM = FTransform::Identity,
472
473 friend struct FIterateBodySetupHelper;
474
475};
476
477#if WITH_EDITOR
478
480{
481public:
483 ENGINE_API virtual bool CanCreateClass(UClass* InObjectClass, bool& bOmitSubObjs) const override;
485
486public:
488};
489
490#endif // WITH_EDITOR
#define NULL
Definition oodle2base.h:134
CORE_API FFeedbackContext * GWarn
Definition CoreGlobals.cpp:53
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:48
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
void FormatData(const TInType &In, uint8 *Out, uint32 &OutByteCount)
Definition SystemTextures.cpp:1289
EDataValidationResult
Definition UObjectGlobals.h:4225
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition ChaosDerivedDataReader.h:18
Definition DataValidation.h:40
Definition BulkData.h:1139
Definition NameTypes.h:617
Definition ObjectMacros.h:180
Definition Array.h:670
Definition UniquePtr.h:107
Definition BodySetupCore.h:19
Definition BodySetup.h:128
EBodySetupCookResult
Definition BodySetup.h:303
Definition Class.h:3793
Definition Model.h:401
Definition Object.h:95
Definition PhysicalMaterialMask.h:22
Definition PhysicalMaterial.h:104
Definition SkeletalMeshComponent.h:307
Type
Definition ShapeElem.h:17
@ false
Definition radaudio_common.h:23
Definition ChaosCooking.h:29
Definition PhysicsInterfaceTypesCore.h:87
Definition BodyInstance.h:320
Definition BodySetup.h:47
TArray< FVector > VertPositions
Definition BodySetup.h:51
TArray< int32 > IndexBuffer
Definition BodySetup.h:49
void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize) const
Definition BodySetup.cpp:116
friend FArchive & operator<<(FArchive &Ar, FBodySetupUVInfo &UVInfo)
Definition BodySetup.h:55
void FillFromTriMesh(const FTriMeshCollisionData &TriMeshCollisionData)
Definition BodySetup.cpp:340
TArray< TArray< FVector2D > > VertUVs
Definition BodySetup.h:53
Definition BodySetup.h:72
EPhysXMeshCookFlags ConvexCookFlags
Definition BodySetup.h:82
ENGINE_API FCookBodySetupInfo()
Definition BodySetup.cpp:57
bool bTriMeshError
Definition BodySetup.h:112
bool bCookNonMirroredConvex
Definition BodySetup.h:94
FString OuterDebugName
Definition BodySetup.h:91
EPhysXMeshCookFlags TriMeshCookFlags
Definition BodySetup.h:79
FTriMeshCollisionData TriangleMeshDesc
Definition BodySetup.h:76
bool bSupportUVFromHitResults
Definition BodySetup.h:106
bool bConvexDeformableMesh
Definition BodySetup.h:100
bool bCookTriMesh
Definition BodySetup.h:103
TArray< TArray< FVector > > MirroredConvexVertices
Definition BodySetup.h:88
TArray< TArray< FVector > > NonMirroredConvexVertices
Definition BodySetup.h:85
bool bCookMirroredConvex
Definition BodySetup.h:97
bool bSupportFaceRemap
Definition BodySetup.h:109
Definition Guid.h:109
Definition AggregateGeom.h:24
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition Interface_CollisionDataProviderCore.h:28
Definition EngineTypes.h:3483
Definition ObjectPtr.h:488
Definition BodySetup.h:310
EBodySetupCookResult CookResult
Definition BodySetup.h:312
FByteBulkData * Data
Definition BodySetup.h:311
static CORE_API const TTransform< double > Identity
Definition TransformNonVectorized.h:58