UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BodyInstance.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/Class.h"
10#include "EngineDefines.h"
14#include "PhysicsPublic.h"
15#include "BodyInstanceCore.h"
16#include "BodyInstance.generated.h"
17
18#define UE_API ENGINE_API
19
20class UBodySetup;
23class UPrimitiveComponent;
25struct FBodyInstance;
27struct FCollisionShape;
30struct FRigidBodyState;
31struct FShapeData;
32
33struct FShapeData;
34
37
38UENUM(BlueprintType)
39namespace EDOFMode
40{
41 enum Type : int
42 {
43 /*Inherits the degrees of freedom from the project settings.*/
45 /*Specifies which axis to freeze rotation and movement along.*/
47 /*Allows 2D movement along the Y-Z plane.*/
49 /*Allows 2D movement along the X-Z plane.*/
51 /*Allows 2D movement along the X-Y plane.*/
53 /*Allows 2D movement along the plane of a given normal*/
55 /*No constraints.*/
56 None
57 };
58}
59
60struct FBodyInstance;
61
62#ifndef CHAOS_DEBUG_NAME
63#define CHAOS_DEBUG_NAME 0
64#endif
65
66#define USE_BODYINSTANCE_DEBUG_NAMES (!NO_LOGGING && CHAOS_DEBUG_NAME)
67
83
84namespace Chaos
85{
86 struct FSerializedDataBuffer;
87}
88
90{
91 // Private base class necessary to keep friend access to FBodyInstance
93 {
94 protected:
95 void SetBodyInstanceExternalCollisionProfileBodySetup(FBodyInstance* BodyInstance, UBodySetup* ExternalCollisionProfileBodySetup);
97 };
98}
99
100template <typename InAllocatorType = FDefaultAllocator>
102{
103public:
105 class UBodySetup* InBodySetup, class UPrimitiveComponent* InPrimitiveComp, FPhysScene* InRBScene,
107
109 class UBodySetup* InBodySetup, class UPrimitiveComponent* InComponent, UObject* InSourceObject, FPhysScene* InRBScene,
111
116
117 bool IsStatic() const { return bStatic; }
118
119 //The arguments passed into InitBodies
122
124 class UPrimitiveComponent* PrimitiveComp;
129
130#if USE_BODYINSTANCE_DEBUG_NAMES
132 TSharedPtr<TArray<ANSICHAR>> PhysXName; // Get rid of ANSICHAR in physics
133#endif
134
135 //The constants shared between PhysX and Box2D
139
140 const USkeletalMeshComponent* SkelMeshComp;
141
143
145
146 // Return to actor ref
149
150 // Takes actor ref arrays.
151 // #PHYS2 this used to return arrays of low-level physics bodies, which would be added to scene in InitBodies. Should it still do that, rather then later iterate over BodyInstances to get phys actor refs?
153 void InitBodies();
154
155protected:
157
158};
159
161
162template <bool bCompileStatic, typename InAllocatorType = FDefaultAllocator>
183
184template <bool bCompileStatic>
186{
199
205
217
220
223};
224
225USTRUCT()
227{
229
232
235
237 ENGINE_API bool SetAllChannels(ECollisionResponse NewResponse);
238
241
243 ECollisionResponse GetResponse(ECollisionChannel Channel) const { return ResponseToChannels.GetResponse(Channel); }
244 const FCollisionResponseContainer& GetResponseContainer() const { return ResponseToChannels; }
245
247 ENGINE_API bool SetCollisionResponseContainer(const FCollisionResponseContainer& InResponseToChannels);
248 ENGINE_API void SetResponsesArray(const TArray<FResponseChannel>& InChannelResponses);
249 ENGINE_API void UpdateResponseContainerFromArray();
250
251 ENGINE_API bool operator==(const FCollisionResponse& Other) const;
253 {
254 return !(*this == Other);
255 }
256
257private:
258
259#if 1// @hack until PostLoad is disabled for CDO of BP - WITH_EDITOR
265 ENGINE_API bool RemoveReponseFromArray(ECollisionChannel Channel);
266 ENGINE_API bool AddReponseToArray(ECollisionChannel Channel, ECollisionResponse Response);
267 ENGINE_API void UpdateArrayFromResponseContainer();
268#endif
269
271 // we have to still load them until resave
273 FCollisionResponseContainer ResponseToChannels;
274
276 UPROPERTY(EditAnywhere, Category = Custom)
277 TArray<FResponseChannel> ResponseArray;
278
279 friend struct FBodyInstance;
280};
281
282template<>
284{
285 enum
286 {
288 };
289};
290
292{
293 NotAdded,
295 Added,
297 Removed
298};
299
300namespace Chaos
301{
302 class FRigidBodyHandle_Internal;
303}
304
305USTRUCT(BlueprintType)
307{
309 FPhysicsActorHandle Proxy = nullptr;
310
311 ENGINE_API Chaos::FRigidBodyHandle_Internal* operator->();
312
313 ENGINE_API bool IsValid() const;
314 operator bool() const { return IsValid(); }
315};
316
318USTRUCT(BlueprintType)
320{
322
323
327 int32 InstanceBodyIndex;
328
330 int16 InstanceBoneIndex;
331
333 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Physics, meta = (editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
334 uint8 PositionSolverIterationCount;
335
337 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
338 uint8 VelocitySolverIterationCount;
339
341 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
342 uint8 ProjectionSolverIterationCount;
343
344private:
346 UPROPERTY(EditAnywhere, Category=Custom)
348
349
351 FMaskFilter MaskFilter;
352
361 UPROPERTY(EditAnywhere, Category=Custom)
363
367 TArray<TEnumAsByte<ECollisionEnabled::Type>> ShapeCollisionEnabled;
368
372 TArray<TPair<int32, FCollisionResponse>> ShapeCollisionResponses;
373
374public:
375 // Current state of the physics body for tracking deferred addition and removal.
376 BodyInstanceSceneState CurrentSceneState;
377
379 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics)
380 ESleepFamily SleepFamily;
381
383 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Mode"))
384 TEnumAsByte<EDOFMode::Type> DOFMode;
385
387 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Collision)
388 uint8 bUseCCD : 1;
389
390private:
391
392 uint8 bShapeCollisionEnabledIsSet : 1;
393 uint8 bShapeCollisionResponsesIsSet : 1;
394
396 UPROPERTY(EditAnywhere, AdvancedDisplay, Category = Collision)
397 uint8 bUseMACD : 1;
398
400 UPROPERTY(EditAnywhere, AdvancedDisplay, Category = Physics)
401 uint8 bAllowPartialIslandSleep : 1;
402
403public:
405 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Collision)
406 uint8 bIgnoreAnalyticCollisions : 1;
407
409 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Collision, meta = (DisplayName = "Simulation Generates Hit Events"))
410 uint8 bNotifyRigidBodyCollision : 1;
411
413 uint8 bContactModification : 1;
414
419 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Collision)
420 uint8 bSmoothEdgeCollisions : 1;
421
423 // SIM SETTINGS
424
426 UPROPERTY(EditAnywhere, Category = Physics, meta=(DisplayName = "Lock Axis Translation"))
427 uint8 bLockTranslation : 1;
428
430 UPROPERTY(EditAnywhere, Category = Physics, meta=(DisplayName = "Lock Axis Rotation"))
431 uint8 bLockRotation : 1;
432
434 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "X"))
435 uint8 bLockXTranslation : 1;
436
438 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Y"))
439 uint8 bLockYTranslation : 1;
440
442 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Z"))
443 uint8 bLockZTranslation : 1;
444
446 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "X"))
447 uint8 bLockXRotation : 1;
448
450 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Y"))
451 uint8 bLockYRotation : 1;
452
454 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Z"))
455 uint8 bLockZRotation : 1;
456
458 UPROPERTY(EditAnywhere, Category = Physics, meta = (editcondition = "bSimulatePhysics", InlineEditConditionToggle))
459 uint8 bOverrideMaxAngularVelocity : 1;
460
461
468 uint8 bHACK_DisableCollisionResponse : 1;
469 /* By default, an owning skel mesh component will override the body's collision filter. This will disable that behavior. */
470 uint8 bHACK_DisableSkelComponentFilterOverriding : 1;
471
473
475 UPROPERTY(EditAnywhere, Category = Physics, meta=(InlineEditConditionToggle))
476 uint8 bOverrideMaxDepenetrationVelocity : 1;
477
479 UPROPERTY(EditAnywhere, Category = Physics, meta = (InlineEditConditionToggle))
480 uint8 bOverrideWalkableSlopeOnInstance : 1;
481
483 UPROPERTY(EditAnywhere, Category = Physics, meta = (InlineEditConditionToggle))
484 uint8 bOverrideIterationCounts : 1;
485
492 UPROPERTY()
493 uint8 bInterpolateWhenSubStepping : 1;
494
496 uint8 bPendingCollisionProfileSetup : 1;
497
512 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics)
513 uint8 bInertiaConditioning : 1;
514
516 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics)
517 uint8 bOneWayInteraction : 1;
518
519public:
521 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics)
522 uint8 bOverrideSolverAsyncDeltaTime : 1;
523
525 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideSolverAsyncDeltaTime"))
526 float SolverAsyncDeltaTime;
527
528 float GetSolverAsyncDeltaTime() const { return SolverAsyncDeltaTime; }
529 bool IsSolverAsyncDeltaTimeSet() const { return bOverrideSolverAsyncDeltaTime && SolverAsyncDeltaTime > 0.0; }
530
531 void SetSolverAsyncDeltaTime(const float NewSolverAsyncDeltaTime);
532
533private:
534 void UpdateSolverAsyncDeltaTime();
535
537 UPROPERTY(EditAnywhere, Category=Custom)
538 FName CollisionProfileName;
539
540public:
543
545 // COLLISION SETTINGS
546
547#if WITH_EDITORONLY_DATA
549 UPROPERTY()
551#endif // WITH_EDITORONLY_DATA
552
553private:
555 UPROPERTY(EditAnywhere, Category = Custom)
556 struct FCollisionResponse CollisionResponses;
557
558protected:
566 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideMaxDepenetrationVelocity", ClampMin = "0.0", UIMin = "0.0"))
567 float MaxDepenetrationVelocity;
568
571 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideMass", ClampMin = "0.001", UIMin = "0.001", DisplayName = "Mass (kg)"))
572 float MassInKgOverride;
573
575 TWeakObjectPtr<UBodySetup> ExternalCollisionProfileBodySetup;
576
578 ENGINE_API void UpdateInterpolateWhenSubStepping();
579
580public:
581
583 bool ShouldInterpolateWhenSubStepping() const { return bInterpolateWhenSubStepping; }
584
586 float GetMassOverride() const { return MassInKgOverride; }
587
588 bool IsUsingMACD() const { return bUseMACD; }
589
590 bool IsPartialIslandSleepAllowed() const { return bAllowPartialIslandSleep; }
591
593 ENGINE_API void SetMassOverride(float MassInKG, bool bNewOverrideMass = true);
594
595 ENGINE_API bool GetRigidBodyState(FRigidBodyState& OutState);
596
598 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Physics)
599 float LinearDamping;
600
602 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Physics)
603 float AngularDamping;
604
606 UPROPERTY(EditAnywhere, Category = Physics, meta = (DisplayName = "Plane Normal"))
607 FVector CustomDOFPlaneNormal;
608
610 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics, meta = (DisplayName = "Center Of Mass Offset"))
611 FVector COMNudge;
612
614 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics, meta = (ClampMin = "0.001", UIMin = "0.001"))
615 float MassScale;
616
618 UPROPERTY(EditAnywhere,BlueprintReadOnly,Category = Physics, meta = (ClampMin = "0", UIMin = "0", UIMax = "7"))
619 uint8 GravityGroupIndex;
620
622 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category = Physics)
623 FVector InertiaTensorScale;
624
625public:
627 ENGINE_API void UseExternalCollisionProfile(UBodySetup* InExternalCollisionProfileBodySetup);
628
629 ENGINE_API void ClearExternalCollisionProfile();
630
632 ENGINE_API void SetDOFLock(EDOFMode::Type NewDOFMode);
633
634 ENGINE_API FVector GetLockedAxis() const;
635 ENGINE_API void CreateDOFLock();
636
637 static ENGINE_API EDOFMode::Type ResolveDOFMode(EDOFMode::Type DOFMode);
638
640 FConstraintInstance* DOFConstraint;
641
643 FBodyInstance* WeldParent;
644
646
651 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideWalkableSlopeOnInstance"))
652 struct FWalkableSlopeOverride WalkableSlopeOverride;
653
655 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Collision)
656 TObjectPtr<class UPhysicalMaterial> PhysMaterialOverride;
657
658public:
660 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics, meta = (editcondition = "bOverrideMaxAngularVelocity"))
661 float MaxAngularVelocity;
662
663
665 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category = Physics)
666 float CustomSleepThresholdMultiplier;
667
669 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=Physics)
670 float StabilizationThresholdMultiplier;
671
674 UPROPERTY()
675 float PhysicsBlendWeight;
676
677public:
678
679 ENGINE_API UBodySetup* GetBodySetup() const;
680
681 ENGINE_API FPhysicsActorHandle GetPhysicsActor() const;
682 ENGINE_API FPhysicsActorHandle GetPhysicsActorWeldRoot() const;
683 ENGINE_API void SetPhysicsActor(FPhysicsActorHandle InHandle);
684 ENGINE_API void ReleasePhysicsActor();
685
686 // TODO_CHAOSAPI: Deprecate ActorHandle Ref API
687 ENGINE_API FPhysicsActorHandle& GetPhysicsActorHandle();
688 ENGINE_API const FPhysicsActorHandle& GetPhysicsActorHandle() const;
689 ENGINE_API const FPhysicsActorHandle& GetActorReferenceWithWelding() const;
690 inline void SetPhysicsActorHandle(FPhysicsActorHandle InHandle) { SetPhysicsActor(InHandle); }
691
692 // TODO_CHAOSAPI: Deprecate public ActorHandle
693 // Internal physics representation of our body instance
695
696public:
698
699#if USE_BODYINSTANCE_DEBUG_NAMES
701#endif
702
705
708
711
715
723 ENGINE_API void LoadProfileData(bool bVerifyProfile);
724
725 void InitBody(UBodySetup* Setup, const FTransform& Transform, UPrimitiveComponent* PrimComp, FPhysScene* InRBScene)
726 {
728 }
729
730
739 ENGINE_API void InitBody(UBodySetup* Setup, const FTransform& Transform, UPrimitiveComponent* PrimComp, FPhysScene* InRBScene, const FInitBodySpawnParams& SpawnParams, IPhysicsBodyInstanceOwner* BodyInstanceOwner = nullptr);
740
752 ENGINE_API void InitBody(UBodySetup* Setup, const FTransform& Transform,
753 UPrimitiveComponent* PrimComp, UObject* SourceObject,
754 FPhysScene* InRBScene, const FInitBodySpawnParams& SpawnParams,
755 IPhysicsBodyInstanceOwner* BodyInstanceOwner = nullptr);
756
762 static ENGINE_API bool ValidateTransform(const FTransform &Transform, const FString& DebugName, const UBodySetup* Setup);
763
771 static ENGINE_API void InitStaticBodies(const TArray<FBodyInstance*>& Bodies, const TArray<FTransform>& Transforms, UBodySetup* BodySetup, class UPrimitiveComponent* PrimitiveComp, FPhysScene* InRBScene);
772
783 static ENGINE_API void InitStaticBodies(TArray<FBodyInstance*>&& Bodies, TArray<FTransform>&& Transforms, UBodySetup* BodySetup, class UPrimitiveComponent* PrimitiveComp, FPhysScene* InRBScene, IPhysicsBodyInstanceOwner* BodyInstanceOwner = nullptr);
784
786 ENGINE_API FPhysScene* GetPhysicsScene();
787 ENGINE_API const FPhysScene* GetPhysicsScene() const;
788
792 ENGINE_API void InitDynamicProperties_AssumesLocked();
793
795 ENGINE_API void BuildBodyFilterData(FBodyCollisionFilterData& OutFilterData, const int32 ShapeIndex = INDEX_NONE) const;
796
799
804 ENGINE_API int32 GetAllShapes_AssumesLocked(TArray<FPhysicsShapeHandle>& OutShapes) const;
805
810 ENGINE_API void TermBody(bool bNeverDeferRelease = false);
811
812 // Contains the payload necessary for FBodyInstance::AsyncTermBody to release the body's resources asynchronously (outside of game thread).
814 {
816 FPhysicsActorHandle GetPhysicsActor() const { return ActorHandle; }
817
818 private:
819 FPhysicsActorHandle ActorHandle;
821 bool bNotifyRigidBodyCollision;
822
823 friend struct FBodyInstance;
824 };
825
831
835 static ENGINE_API void AsyncTermBody(FAsyncTermBodyPayload& Payload);
836
840 ENGINE_API bool Weld(FBodyInstance* Body, const FTransform& RelativeTM);
841
844 ENGINE_API void UnWeld(FBodyInstance* Body);
845
848
852
859 ENGINE_API bool UpdateBodyScale(const FVector& InScale3D, bool bForceUpdate = false);
860
862 ENGINE_API void UpdateTriMeshVertices(const TArray<FVector> & NewPositions);
863
866 {
868 }
869
872
875
878
881
884
887
890
893
896
899
902
905
908
910 ENGINE_API const struct FWalkableSlopeOverride& GetWalkableSlopeOverride() const;
911
913 ENGINE_API void SetWalkableSlopeOverride(const FWalkableSlopeOverride& NewOverride, bool bNewOverideSetting = true);
914
916 ENGINE_API bool GetOverrideWalkableSlopeOnInstance() const;
917
919 ENGINE_API bool IsDynamic() const;
920
922 ENGINE_API bool IsNonKinematic() const;
923
925 ENGINE_API float GetBodyMass() const;
927 ENGINE_API FBox GetBodyBounds() const;
929 ENGINE_API FBox GetBodyBoundsLocal() const;
931 ENGINE_API FVector GetBodyInertiaTensor() const;
932
934 bool IsInertiaConditioningEnabled() const { return bInertiaConditioning; }
935
937 ENGINE_API void SetInertiaConditioningEnabled(bool bEnabled);
938
940 ENGINE_API void ApplyAsyncPhysicsCommand(FAsyncPhysicsTimestamp TimeStamp, const bool bIsInternal, APlayerController* PlayerController, const TFunction<void()>& Command);
941
952 ENGINE_API void SetInstanceSimulatePhysics(bool bSimulate, bool bMaintainPhysicsBlending=false, bool bPreserveExistingAttachment = false);
954 ENGINE_API void UpdateInstanceSimulatePhysics();
956 bool IsInstanceSimulatingPhysics() const;
958 ENGINE_API bool IsInstanceAwake() const;
960 ENGINE_API void WakeInstance();
962 ENGINE_API void PutInstanceToSleep();
964 ENGINE_API float GetSleepThresholdMultiplier() const;
966 ENGINE_API void AddCustomPhysics(FCalculateCustomPhysics& CalculateCustomPhysics);
968 ENGINE_API void AddForce(const FVector& Force, bool bAllowSubstepping = true, bool bAccelChange = false, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
970 ENGINE_API void AddForceAtPosition(const FVector& Force, const FVector& Position, bool bAllowSubstepping = true, bool bIsLocalForce = false, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
972 ENGINE_API void ClearForces(bool bAllowSubstepping = true);
973
975 ENGINE_API void SetOneWayInteraction(bool InOneWayInteraction = true);
976
978 ENGINE_API void AddTorqueInRadians(const FVector& Torque, bool bAllowSubstepping = true, bool bAccelChange = false, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
980 ENGINE_API void ClearTorques(bool bAllowSubstepping = true);
981
983 ENGINE_API void AddAngularImpulseInRadians(const FVector& Impulse, bool bVelChange, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
984
986 ENGINE_API void AddImpulse(const FVector& Impulse, bool bVelChange, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
987
989 ENGINE_API void AddImpulseAtPosition(const FVector& Impulse, const FVector& Position, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
990
992 ENGINE_API void AddVelocityChangeImpulseAtLocation(const FVector& Impulse, const FVector& Position, const FAsyncPhysicsTimestamp TimeStamp = FAsyncPhysicsTimestamp(), APlayerController* PlayerController = nullptr);
993
995 ENGINE_API void SetLinearVelocity(const FVector& NewVel, bool bAddToCurrent, bool bAutoWake = true);
996
998 ENGINE_API void SetAngularVelocityInRadians(const FVector& NewAngVel, bool bAddToCurrent, bool bAutoWake = true);
999
1001 ENGINE_API void SetMaxAngularVelocityInRadians(float NewMaxAngVel, bool bAddToCurrent, bool bUpdateOverrideMaxAngularVelocity = true);
1002
1004 ENGINE_API float GetMaxAngularVelocityInRadians() const;
1005
1007 bool GetOverrideMaxDepenetrationVelocity() const { return bOverrideMaxDepenetrationVelocity; }
1008
1010 ENGINE_API void SetOverrideMaxDepenetrationVelocity(bool bInEnabled);
1011
1018 ENGINE_API void SetMaxDepenetrationVelocity(float MaxVelocity);
1019
1021 float GetMaxDepenetrationVelocity() const { return MaxDepenetrationVelocity; }
1022
1024 ENGINE_API void SetInstanceNotifyRBCollision(bool bNewNotifyCollision);
1026 ENGINE_API void SetEnableGravity(bool bGravityEnabled);
1028 ENGINE_API void SetGravityGroupIndex(int32 NewGravityGroupIndex);
1030 ENGINE_API void SetUpdateKinematicFromSimulation(bool bUpdateKinematicFromSimulation);
1032 ENGINE_API void SetGyroscopicTorqueEnabled(bool bInGyroscopicTorqueEnabled);
1034 ENGINE_API void SetContactModification(bool bNewContactModification);
1036 ENGINE_API void SetSmoothEdgeCollisionsEnabled(bool bNewSmoothEdgeCollisions);
1037
1039 ENGINE_API void SetUseCCD(bool bInUseCCD);
1040
1046 ENGINE_API void SetUseMACD(bool bInUseMACD);
1047
1054 ENGINE_API void SetAllowPartialIslandSleep(bool bInAllowPartialIslandSleep);
1055
1056 // Set the per-body position iterations (only used if bOverrideIterationCounts is true)
1057 ENGINE_API void SetPositionSolverIterationCount(uint8 PositionSolverIterationCountIn);
1058
1059 // Set the per-body velocity iterations (only used if bOverrideIterationCounts is true)
1060 ENGINE_API void SetVelocitySolverIterationCount(uint8 VelocitySolverIterationCountIn);
1061
1062 // Set the per-body projection iterations (only used if bOverrideIterationCounts is true)
1063 ENGINE_API void SetProjectionSolverIterationCount(uint8 ProjectionSolverIterationCountIn);
1064
1065 // Enable or disable the use of iteration count overrides
1066 ENGINE_API void SetOverrideIterationCounts(bool bOverride);
1067
1068 // Get the per-body position iterations (or -1 if bOverrideIterationCounts is false)
1069 int32 GetPositionSolverIterationCount() const { return (!!bOverrideIterationCounts) ? PositionSolverIterationCount : -1; }
1070
1071 // Get the per-body velocity iterations (or -1 if bOverrideIterationCounts is false)
1072 int32 GetVelocitySolverIterationCount() const { return (!!bOverrideIterationCounts) ? VelocitySolverIterationCount : -1; }
1073
1074 // Get the per-body projection iterations (or -1 if bOverrideIterationCounts is false)
1075 int32 GetProjectionSolverIterationCount() const { return (!!bOverrideIterationCounts) ? ProjectionSolverIterationCount : -1; }
1076
1078 bool GetUseMACD() const { return bUseMACD != 0; }
1079
1081 bool GetAllowPartialIslandSleep() const { return bAllowPartialIslandSleep != 0; }
1082
1086 ENGINE_API void SetPhysicsDisabled(bool bSetDisabled);
1087
1088 ENGINE_API bool IsPhysicsDisabled() const;
1089
1091 ENGINE_API EPhysicsReplicationMode GetPhysicsReplicationMode() const;
1092
1093private:
1094
1096 struct FBodyInstanceDelegates
1097 {
1099 FCalculateCustomProjection OnCalculateCustomProjection;
1100
1102 FRecalculatedMassProperties OnRecalculatedMassProperties;
1103 };
1104
1106 struct FBodyInstanceDelegatesPtr : public TUniquePtr<FBodyInstanceDelegates>
1107 {
1108 FBodyInstanceDelegatesPtr() = default;
1109 FBodyInstanceDelegatesPtr(const FBodyInstanceDelegatesPtr& Other)
1110 {
1111 if (Other.IsValid())
1112 {
1113 Reset(new FBodyInstanceDelegates);
1114 *Get() = *Other;
1115 }
1116 }
1117
1118 FBodyInstanceDelegatesPtr& operator=(const FBodyInstanceDelegatesPtr& Other)
1119 {
1120 if (Other.IsValid())
1121 {
1122 if (!IsValid())
1123 {
1124 Reset(new FBodyInstanceDelegates);
1125 }
1126 *Get() = *Other;
1127 }
1128 else
1129 {
1130 Reset();
1131 }
1132
1133 return *this;
1134 }
1135 };
1136
1138 FBodyInstanceDelegatesPtr BodyInstanceDelegates;
1139
1140public:
1142 ENGINE_API void ExecuteOnCalculateCustomProjection(FTransform& WorldTM) const;
1143
1145 ENGINE_API FCalculateCustomProjection& OnCalculateCustomProjection();
1146
1148 ENGINE_API FRecalculatedMassProperties& OnRecalculatedMassProperties();
1149
1151 ENGINE_API bool IsValidBodyInstance() const;
1152
1154 ENGINE_API FTransform GetUnrealWorldTransform(bool bWithProjection = true, bool bForceGlobalPose = false) const;
1155
1157 ENGINE_API FTransform GetUnrealWorldTransform_AssumesLocked(bool bWithProjection = true, bool bForceGlobalPose = false) const;
1158
1160 ENGINE_API FTransform GetKinematicTarget() const;
1161
1163 ENGINE_API FTransform GetKinematicTarget_AssumesLocked() const;
1164
1169 ENGINE_API void SetBodyTransform(const FTransform& NewTransform, ETeleportType Teleport, bool bAutoWake = true);
1170
1172 ENGINE_API FVector GetUnrealWorldVelocity() const;
1173
1175 ENGINE_API FVector GetUnrealWorldVelocity_AssumesLocked() const;
1176
1178 ENGINE_API FVector GetUnrealWorldAngularVelocityInRadians() const;
1179
1181 ENGINE_API FVector GetUnrealWorldAngularVelocityInRadians_AssumesLocked() const;
1182
1184 ENGINE_API FVector GetUnrealWorldVelocityAtPoint(const FVector& Point) const;
1185
1187 ENGINE_API FVector GetUnrealWorldVelocityAtPoint_AssumesLocked(const FVector& Point) const;
1188
1190 UPhysicalMaterial* GetPhysMaterialOverride() const { return PhysMaterialOverride; }
1191
1193 ENGINE_API void SetPhysMaterialOverride(class UPhysicalMaterial* NewPhysMaterial);
1194
1197
1199 ENGINE_API bool SetResponseToChannel(ECollisionChannel Channel, ECollisionResponse NewResponse);
1200
1202 inline ECollisionResponse GetResponseToChannel(ECollisionChannel Channel) const { return CollisionResponses.GetResponse(Channel); }
1203
1205 ENGINE_API bool SetResponseToAllChannels(ECollisionResponse NewResponse);
1206
1209
1211 ENGINE_API bool SetResponseToChannels(const FCollisionResponseContainer& NewResponses);
1212
1214 ENGINE_API bool SetShapeResponseToChannels(const int32 ShapeIndex, const FCollisionResponseContainer& NewResponses);
1215
1217 inline const FCollisionResponseContainer& GetResponseToChannels() const { return CollisionResponses.GetResponseContainer(); }
1218
1220 ENGINE_API const FCollisionResponseContainer& GetShapeResponseToChannels(const int32 ShapeIndex) const;
1221 ENGINE_API const FCollisionResponseContainer& GetShapeResponseToChannels(const int32 ShapeIndex, const FCollisionResponseContainer& DefaultResponseContainer) const;
1222
1224 ENGINE_API void SetObjectType(ECollisionChannel Channel);
1225
1227 inline ECollisionChannel GetObjectType() const { return ObjectType; }
1228
1230 ENGINE_API void SetCollisionEnabled(ECollisionEnabled::Type NewType, bool bUpdatePhysicsFilterData = true);
1231
1233 ENGINE_API void SetShapeCollisionEnabled(const int32 ShapeIndex, ECollisionEnabled::Type NewType, bool bUpdatePhysicsFilterData = true);
1234
1235private:
1236
1237 ENGINE_API ECollisionEnabled::Type GetCollisionEnabled_CheckOwner() const;
1238
1239public:
1242 {
1243 return (bCheckOwner ? GetCollisionEnabled_CheckOwner() : CollisionEnabled.GetValue());
1244 }
1245
1247 ENGINE_API ECollisionEnabled::Type GetShapeCollisionEnabled(const int32 ShapeIndex) const;
1248
1256 ENGINE_API void SetCollisionProfileNameDeferred(FName InCollisionProfileName);
1257
1265 ENGINE_API void SetCollisionProfileName(FName InCollisionProfileName);
1266
1268 ENGINE_API void SetMaskFilter(FMaskFilter InMaskFilter);
1269
1271 inline FMaskFilter GetMaskFilter() const { return MaskFilter; }
1273 ENGINE_API FName GetCollisionProfileName() const;
1274
1276 ENGINE_API bool DoesUseCollisionProfile() const;
1277
1279 ENGINE_API void SetMassScale(float InMassScale=1.f);
1280
1282 ENGINE_API void UpdateMassProperties();
1283
1285 ENGINE_API void UpdateDampingProperties();
1286
1288 ENGINE_API void UpdatePhysicalMaterials();
1289
1297
1300
1302 ENGINE_API void UpdatePhysicsFilterData();
1303
1305
1307 ENGINE_API FString GetBodyDebugName() const;
1308
1318 ENGINE_API bool LineTrace(struct FHitResult& OutHit, const FVector& Start, const FVector& End, bool bTraceComplex, bool bReturnPhysicalMaterial = false) const;
1319
1330 ENGINE_API bool Sweep(struct FHitResult& OutHit, const FVector& Start, const FVector& End, const FQuat& ShapeWorldRotation, const FCollisionShape& Shape, bool bTraceComplex) const;
1331
1342 ENGINE_API bool OverlapTest(const FVector& Position, const FQuat& Rotation, const struct FCollisionShape& CollisionShape, FMTDResult* OutMTD = nullptr, bool bTraceComplex = false) const;
1343
1355 ENGINE_API bool OverlapTest_AssumesLocked(const FVector& Position, const FQuat& Rotation, const struct FCollisionShape& CollisionShape, FMTDResult* OutMTD = nullptr, bool bTraceComplex = false) const;
1356
1366 bool OverlapTestForBodies(const FVector& Position, const FQuat& Rotation, const TArray<FBodyInstance*>& Bodies, bool bTraceComplex = false) const;
1367 bool OverlapTestForBody(const FVector& Position, const FQuat& Rotation, FBodyInstance* Body, bool bTraceComplex = false) const;
1368
1385
1395 ENGINE_API void AddRadialImpulseToBody(const FVector& Origin, float Radius, float Strength, uint8 Falloff, bool bVelChange = false);
1396
1407 ENGINE_API void AddRadialForceToBody(const FVector& Origin, float Radius, float Strength, uint8 Falloff, bool bAccelChange = false, bool bAllowSubstepping = true);
1408
1420 ENGINE_API bool GetSquaredDistanceToBody(const FVector& Point, float& OutDistanceSquared, FVector& OutPointOnBody) const;
1421
1430 ENGINE_API float GetDistanceToBody(const FVector& Point, FVector& OutPointOnBody) const;
1431
1435 ENGINE_API void GetBodyInstanceResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) const;
1436
1440 ENGINE_API void FixupData(class UObject* Loader);
1441
1442 const FCollisionResponse& GetCollisionResponse() const { return CollisionResponses; }
1443
1445 ENGINE_API void ApplyDeferredCollisionProfileName();
1446
1448 ENGINE_API const FBodyInstance* GetOriginalBodyInstance(const FPhysicsShapeHandle& InShape) const;
1449
1451 ENGINE_API const FTransform& GetRelativeBodyTransform(const FPhysicsShapeHandle& InShape) const;
1452
1454 ENGINE_API bool IsShapeBoundToBody(const FPhysicsShapeHandle& Shape) const;
1455
1456public:
1457 // #PHYS2 Rename, not just for physx now.
1459
1461 {
1463 : ChildBI(InChildBI)
1464 , RelativeTM(InRelativeTM)
1465 {}
1466
1469 };
1470
1471 ENGINE_API const TMap<FPhysicsShapeHandle, FWeldInfo>* GetCurrentWeldInfo() const;
1472
1473private:
1474
1475 ENGINE_API void UpdateOneWayInteraction();
1476 ENGINE_API void UpdateMaxDepenetrationVelocity();
1477
1483 ENGINE_API void InvalidateCollisionProfileName();
1484
1486 ENGINE_API void SetWeldedBodyTransform(FBodyInstance* TheirBody, const FTransform& NewTransform);
1487
1491 static ENGINE_API bool IsValidCollisionProfileName(FName InCollisionProfileName);
1492
1493 template<typename AllocatorType>
1494 ENGINE_API bool OverlapTestForBodiesImpl(const FVector& Position, const FQuat& Rotation, const TArray<FBodyInstance*, AllocatorType>& Bodies, bool bTraceComplex = false) const;
1495
1496 friend class UPhysicsAsset;
1497 friend class UCollisionProfile;
1498 friend class FBodyInstanceCustomization;
1499 friend struct FUpdateCollisionResponseHelper;
1500 friend class FBodySetupDetails;
1501
1503 friend class FBodyInstanceCustomizationHelper;
1504 friend class FFoliageTypeCustomizationHelpers;
1505
1506public:
1507
1510
1513
1514private:
1515
1516 ENGINE_API void UpdateDebugRendering();
1517
1520
1521};
1522
1523template<>
1525{
1526 enum
1527 {
1528 WithCopy = false
1530};
1531
1532
1533#if WITH_EDITOR
1534
1535// Helper methods for classes with body instances
1537{
1538 ENGINE_API static void EnsureConsistentMobilitySimulationSettingsOnPostEditChange(UPrimitiveComponent* Component, FPropertyChangedEvent& PropertyChangedEvent);
1539
1540private:
1542};
1543#endif
1544
1546// BodyInstance inlines
1547
1549
1551{
1552 // Pass on to FQuat version
1553 return OverlapMulti(InOutOverlaps, World, pWorldToComponent, Pos, Rot.Quaternion(), TestChannel, Params, ResponseParams, ObjectQueryParams);
1554}
1555
1557
1559{
1560 return OverlapTestForBodiesImpl(Position, Rotation, Bodies, bTraceComplex);
1561}
1562
1564{
1566 InlineArray.Add(Body);
1567 return OverlapTestForBodiesImpl(Position, Rotation, InlineArray, bTraceComplex);
1568}
1569
1574
1575#undef UE_API
@ Normal
Definition AndroidInputInterface.h:116
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
BodyInstanceSceneState
Definition BodyInstance.h:292
ENGINE_API FArchive & operator<<(FArchive &Ar, FBodyInstance &BodyInst)
Definition BodyInstance.cpp:422
ENGINE_API int32 FillInlineShapeArray_AssumesLocked(PhysicsInterfaceTypes::FInlineShapeArray &Array, const FPhysicsActorHandle &Actor)
Definition BodyInstance.cpp:129
ESleepFamily
Definition ChaosEngineInterface.h:102
uint8 FMaskFilter
Definition CollisionFilter.h:14
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ETeleportType
Definition EngineTypes.h:2401
EPhysicsReplicationMode
Definition EngineTypes.h:3378
ECollisionChannel
Definition EngineTypes.h:1088
ECollisionResponse
Definition EngineTypes.h:1240
auto Response
Definition ExternalRpcRegistry.cpp:598
#define X(Name, Desc)
Definition FormatStringSan.h:47
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
const bool bTraceComplex
Definition PhysicsInterfaceUtils.h:19
#define UE_API
Definition SColorGradingComponentViewer.h:12
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition PlayerController.h:261
Definition SingleParticlePhysicsProxy.h:58
Definition Archive.h:1208
Definition NameTypes.h:617
Definition PhysScene_Chaos.h:116
Definition ChaosEngineInterface.h:241
Definition ChaosEngineInterface.h:263
Definition PhysicsUserData_Chaos.h:14
Definition PrimitiveDrawInterface.h:19
Definition PhysicsBodyInstanceOwnerInterface.h:35
Definition ArrayView.h:139
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition EnumAsByte.h:22
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition BodySetup.h:128
Definition CollisionProfile.h:161
Definition Object.h:95
Definition PhysicalMaterialMask.h:22
Definition PhysicalMaterial.h:104
Definition PhysicsAsset.h:172
Definition World.h:918
Definition BodyInstance.h:90
Definition SkeletalMeshComponent.h:307
ESerializedDataContext
Definition SolverSerializer.h:27
Definition EngineTypes.h:1571
Type
Definition EngineTypes.h:1573
Definition BodyInstance.h:40
Type
Definition BodyInstance.h:42
@ CustomPlane
Definition BodyInstance.h:54
@ SixDOF
Definition BodyInstance.h:46
@ XZPlane
Definition BodyInstance.h:50
@ XYPlane
Definition BodyInstance.h:52
@ YZPlane
Definition BodyInstance.h:48
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
FQuat2D Rot
Definition STestSuite.cpp:5721
Definition SerializedDataBuffer.h:12
void UpdateBodyInstanceSolverAsyncDeltaTime(FBodyInstance *BodyInstance)
Definition BodyInstance.cpp:1219
void SetBodyInstanceExternalCollisionProfileBodySetup(FBodyInstance *BodyInstance, UBodySetup *ExternalCollisionProfileBodySetup)
Definition BodyInstance.cpp:1214
Definition PlayerController.h:231
Definition PhysicsInterfaceTypesCore.h:62
Definition PhysicsInterfaceTypesCore.h:69
Definition BodyInstance.h:307
Definition BodyInstanceCore.h:16
PHYSICSCORE_API bool ShouldInstanceSimulatingPhysics() const
Definition BodyInstanceCore.cpp:27
Definition BodyInstance.h:814
FPhysicsActorHandle GetPhysicsActor() const
Definition BodyInstance.h:816
Definition BodyInstance.h:1461
FTransform RelativeTM
Definition BodyInstance.h:1468
FBodyInstance * ChildBI
Definition BodyInstance.h:1467
FWeldInfo(FBodyInstance *InChildBI, const FTransform &InRelativeTM)
Definition BodyInstance.h:1462
Definition BodyInstance.h:320
FBodyInstanceAsyncPhysicsTickHandle GetBodyInstanceAsyncPhysicsTickHandle() const
Definition BodyInstance.h:697
ENGINE_API bool IsValidBodyInstance() const
Definition BodyInstance.cpp:2701
ENGINE_API UPhysicalMaterial * GetSimplePhysicalMaterial() const
Definition BodyInstance.cpp:3129
bool IsInstanceSimulatingPhysics() const
Definition BodyInstance.h:1570
ECollisionEnabled::Type GetCollisionEnabled(bool bCheckOwner=true) const
Definition BodyInstance.h:1241
ENGINE_API FTransform GetMassSpaceLocal() const
Definition BodyInstance.cpp:2914
ENGINE_API FTransform GetMassSpaceToWorldSpace() const
Definition BodyInstance.cpp:2902
ENGINE_API void PostShapeChange()
Definition BodyInstance.cpp:2051
ENGINE_API ~FBodyInstance()
bool IsPartialIslandSleepAllowed() const
Definition BodyInstance.h:590
const FCollisionResponseContainer & GetResponseToChannels() const
Definition BodyInstance.h:1217
static ENGINE_API void AsyncTermBody(FAsyncTermBodyPayload &Payload)
Definition BodyInstance.cpp:1820
ECollisionResponse GetResponseToChannel(ECollisionChannel Channel) const
Definition BodyInstance.h:1202
int32 GetProjectionSolverIterationCount() const
Definition BodyInstance.h:1075
ENGINE_API TArray< UPhysicalMaterial * > GetComplexPhysicalMaterials() const
Definition BodyInstance.cpp:3208
void InitBody(UBodySetup *Setup, const FTransform &Transform, UPrimitiveComponent *PrimComp, FPhysScene *InRBScene)
Definition BodyInstance.h:725
bool IsInertiaConditioningEnabled() const
Definition BodyInstance.h:934
ENGINE_API void CopyBodyInstancePropertiesFrom(const FBodyInstance *FromInst)
Definition BodyInstance.cpp:3009
bool IsUsingMACD() const
Definition BodyInstance.h:588
float GetMassOverride() const
Definition BodyInstance.h:586
int32 GetVelocitySolverIterationCount() const
Definition BodyInstance.h:1072
TWeakObjectPtr< UObject > SourceObject
Definition BodyInstance.h:710
bool OverlapMulti(TArray< struct FOverlapResult > &InOutOverlaps, const class UWorld *World, const FTransform *pWorldToComponent, const FVector &Pos, const FRotator &Rot, ECollisionChannel TestChannel, const struct FComponentQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const FCollisionObjectQueryParams &ObjectQueryParams=FCollisionObjectQueryParams::DefaultObjectQueryParam) const
bool GetOverrideMaxDepenetrationVelocity() const
Definition BodyInstance.h:1007
ENGINE_API bool Weld(FBodyInstance *Body, const FTransform &RelativeTM)
Definition BodyInstance.cpp:1914
FMaskFilter GetMaskFilter() const
Definition BodyInstance.h:1271
bool IsSolverAsyncDeltaTimeSet() const
Definition BodyInstance.h:529
ENGINE_API FAsyncTermBodyPayload StartAsyncTermBody_GameThread()
Definition BodyInstance.cpp:1793
ENGINE_API void DrawCOMPosition(class FPrimitiveDrawInterface *PDI, float COMRenderSize, const FColor &COMRenderColor)
Definition BodyInstance.cpp:3000
bool GetAllowPartialIslandSleep() const
Definition BodyInstance.h:1081
TWeakObjectPtr< class UPrimitiveComponent > OwnerComponent
Definition BodyInstance.h:704
IPhysicsBodyInstanceOwner * BodyInstanceOwner
Definition BodyInstance.h:707
int32 GetPositionSolverIterationCount() const
Definition BodyInstance.h:1069
FVector Scale3D
Definition BodyInstance.h:542
bool GetUseMACD() const
Definition BodyInstance.h:1078
FPhysicsActorHandle ActorHandle
Definition BodyInstance.h:694
float GetMaxDepenetrationVelocity() const
Definition BodyInstance.h:1021
const FCollisionResponse & GetCollisionResponse() const
Definition BodyInstance.h:1442
ENGINE_API void CopyRuntimeBodyInstancePropertiesFrom(const FBodyInstance *FromInst)
Definition BodyInstance.cpp:3021
UPhysicalMaterial * GetPhysMaterialOverride() const
Definition BodyInstance.h:1190
bool OverlapTestForBody(const FVector &Position, const FQuat &Rotation, FBodyInstance *Body, bool bTraceComplex=false) const
Definition BodyInstance.h:1563
FVector GetCOMPosition() const
Definition BodyInstance.h:865
ENGINE_API void ApplyWeldOnChildren()
Definition BodyInstance.cpp:2615
ENGINE_API bool OverlapMulti(TArray< struct FOverlapResult > &InOutOverlaps, const class UWorld *World, const FTransform *pWorldToComponent, const FVector &Pos, const FQuat &Rot, ECollisionChannel TestChannel, const struct FComponentQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const FCollisionObjectQueryParams &ObjectQueryParams=FCollisionObjectQueryParams::DefaultObjectQueryParam) const
Definition BodyInstance.cpp:4307
ENGINE_API void UnWeld(FBodyInstance *Body)
Definition BodyInstance.cpp:2007
ENGINE_API void SetContactReportForceThreshold(float Threshold)
FPhysicsUserData PhysicsUserData
Definition BodyInstance.h:1458
ENGINE_API void SetMassSpaceLocal(const FTransform &NewMassSpaceLocalTM)
Definition BodyInstance.cpp:2926
ENGINE_API void UpdateTriMeshVertices(const TArray< FVector > &NewPositions)
Definition BodyInstance.cpp:495
ECollisionChannel GetObjectType() const
Definition BodyInstance.h:1227
bool OverlapTestForBodies(const FVector &Position, const FQuat &Rotation, const TArray< FBodyInstance * > &Bodies, bool bTraceComplex=false) const
Definition BodyInstance.h:1558
ENGINE_API bool UpdateBodyScale(const FVector &InScale3D, bool bForceUpdate=false)
Definition BodyInstance.cpp:2178
Definition PhysicsPublic.h:91
Definition CollisionQueryParams.h:430
static ENGINE_API FCollisionObjectQueryParams DefaultObjectQueryParam
Definition CollisionQueryParams.h:538
Definition EngineTypes.h:1339
Definition CollisionQueryParams.h:324
Definition BodyInstance.h:227
ECollisionResponse GetResponse(ECollisionChannel Channel) const
Definition BodyInstance.h:243
const FCollisionResponseContainer & GetResponseContainer() const
Definition BodyInstance.h:244
bool operator!=(const FCollisionResponse &Other) const
Definition BodyInstance.h:252
friend struct FBodyInstance
Definition BodyInstance.h:279
Definition CollisionShape.h:21
Definition Color.h:486
Definition CollisionQueryParams.h:297
Definition ConstraintInstance.h:255
Definition HitResult.h:21
Definition BodyInstance.h:186
FInitBodiesHelperWithData(TArray< FBodyInstance * > &&InBodies, TArray< FTransform > &&InTransforms, class UBodySetup *InBodySetup, class UPrimitiveComponent *InPrimitiveComp, FPhysScene *InRBScene, const FInitBodySpawnParams &InSpawnParams, FPhysicsAggregateHandle InAggregate, IPhysicsBodyInstanceOwner *InBodyInstanceOwner=nullptr)
Definition BodyInstance.h:188
FInitBodiesHelperWithData(const FInitBodiesHelperWithData &InHelper)
Definition BodyInstance.h:200
FInitBodiesHelperWithData & operator=(const FInitBodiesHelperWithData &InHelper)=delete
FInitBodiesHelperWithData(FInitBodiesHelperWithData &&InHelper)
Definition BodyInstance.h:206
TArray< FBodyInstance * > OwnedBodies
Definition BodyInstance.h:221
FInitBodiesHelperWithData & operator=(FInitBodiesHelperWithData &&InHelper)=delete
FInitBodiesHelperWithData()
Definition BodyInstance.h:187
TArray< FTransform > OwnedTransforms
Definition BodyInstance.h:222
Definition BodyInstance.h:164
FInitBodiesHelper(TArray< FBodyInstance *, InAllocatorType > &InBodies, TArray< FTransform, InAllocatorType > &InTransforms, class UBodySetup *InBodySetup, class UPrimitiveComponent *InComponent, class UObject *InSourceObject, FPhysScene *InRBScene, const FInitBodySpawnParams &InSpawnParams, FPhysicsAggregateHandle InAggregate, IPhysicsBodyInstanceOwner *InBodyInstanceOwner=nullptr)
Definition BodyInstance.h:169
Definition BodyInstance.h:70
bool bStaticPhysics
Definition BodyInstance.h:75
FPhysicsAggregateHandle Aggregate
Definition BodyInstance.h:81
bool bPhysicsTypeDeterminesSimulation
Definition BodyInstance.h:78
Definition EngineTypes.h:2418
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition ReplicatedState.h:86
Definition EngineTypes.h:3483
Definition BodyInstance.h:102
FPhysicsAggregateHandle Aggregate
Definition BodyInstance.h:128
FPhysScene * PhysScene
Definition BodyInstance.h:127
UObject * SourceObject
Definition BodyInstance.h:126
const USkeletalMeshComponent * SkelMeshComp
Definition BodyInstance.h:140
void CreateActor_AssumesLocked(FBodyInstance *Instance, const FTransform &Transform) const
Definition BodyInstance.cpp:1290
void UpdateSimulatingAndBlendWeight()
Definition BodyInstance.cpp:1283
float InstanceBlendWeight
Definition BodyInstance.h:138
void InitBodies()
Definition BodyInstance.cpp:1583
TInitBodiesHelperBase(const TInitBodiesHelperBase &InHelper)=delete
class UBodySetup * BodySetup
Definition BodyInstance.h:123
TInitBodiesHelperBase(TInitBodiesHelperBase &&InHelper)=delete
bool bInstanceSimulatePhysics
Definition BodyInstance.h:137
bool CreateShapesAndActors()
Definition BodyInstance.cpp:1432
TArray< FBodyInstance *, InAllocatorType > & Bodies
Definition BodyInstance.h:120
bool CreateShapes_AssumesLocked(FBodyInstance *Instance) const
Definition BodyInstance.cpp:1335
bool bStatic
Definition BodyInstance.h:136
TInitBodiesHelperBase & operator=(const TInitBodiesHelperBase &InHelper)=delete
class UPrimitiveComponent * PrimitiveComp
Definition BodyInstance.h:124
TArray< FTransform, InAllocatorType > & Transforms
Definition BodyInstance.h:121
const FInitBodySpawnParams & SpawnParams
Definition BodyInstance.h:142
TInitBodiesHelperBase & operator=(TInitBodiesHelperBase &&InHelper)=delete
bool DisableQueryOnlyActors
Definition BodyInstance.h:144
bool IsStatic() const
Definition BodyInstance.h:117
IPhysicsBodyInstanceOwner * BodyInstanceOwner
Definition BodyInstance.h:125
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithIdenticalViaEquality
Definition StructOpsTypeTraits.h:18
@ WithCopy
Definition StructOpsTypeTraits.h:17
Definition StructOpsTypeTraits.h:46
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
UE_FORCEINLINE_HINT TVector< T > GetLocation() const
Definition TransformNonVectorized.h:571