UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SimpleSuspension.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"
6#include "Math/UnrealMath.h"
8#include "Containers/Array.h"
9
11{
13 : Stiffness(0.f)
14 , Damping(0.f)
15 , Length(0.f)
16 , Mass(0.f)
17 { }
18
19 float Stiffness;
20 float Damping;
21 float Length;
22 float Mass;
23};
24
43
62
64
66{
67 // Do an intersection with the z-plane at 0,0,0.
69 const FVector Diff = RayEnd - RayBegin;
72 if (FMath::Abs(ProjDiff) > UE_SMALL_NUMBER)
73 {
74 const FVector::FReal Lambda = -ProjA / ProjDiff;
75 if (Lambda > 0.f && Lambda <= 1.f)
76 {
77 OutRayHitLocation = RayBegin + (Lambda * Diff);
79 return true;
80 }
81 }
82 return false;
83};
84
117
119{
120 //
121 // Setup functions
122 //
123
135
139 ENGINE_API static bool ComputeSprungMasses(const TArray<FVector>& LocalSpringPositions, const FVector& LocalCenterOfMass, const float TotalMass, TArray<float>& OutSprungMasses, FString* ErrMsg = nullptr);
140
142 static bool ComputeSingleAxisLambda(const FVector::FReal AxisDot, const FVector::FReal SumAxis, const uint32 Count, TArray<FVector::FReal, TFixedAllocator<2>>& Lambdas, FString* ErrMsg = nullptr);
143
146 static void ComputeSpringNaturalFrequencyAndDampingRatio(const float SprungMass, const float SpringStiffness, const float SpringDamping, float& OutNaturalFrequency, float& OutDampingRatio);
147
150 static float ComputeSpringStiffness(const float SprungMass, const float NaturalFrequency);
151
155 static float ComputeSpringDamping(const float SprungMass, const float NaturalFrequency, const float DampingRatio);
156
159 static float ComputeSpringCriticalDamping(const float SprungMass, const float NaturalFrequency);
160
163 static float ComputeSpringRestLength(const float SpringStiffness, const float SprungMass, const float SuspendedLength, const float Gravity);
164
166 static void ComputeSpringParams(const TArray<FVector>& LocalSuspensionOrigins, const FVector& LocalCenterOfMass, const float TotalMass, const FVector& LocalSuspensionNormal, const float LocalGroundDistance, const float NaturalFrequency, const float DampingRatio, const float Gravity, TArray<FSimpleSuspensionSpringParams>& OutSpringParams);
167
169 static void ComputeSpringParams(const FSimpleSuspensionParams& SuspensionParams, const float TotalMass, const float Gravity, TArray<FSimpleSuspensionSpringParams>& OutSpringParams);
170
171 //
172 // Dynamics functions
173 //
174
176
178
183
185
187 static float ComputeSpringForce(const float SpringStiffness, const float SpringDamping, const float SpringDisplacement, const float SpringVelocity);
188
193 static void ComputeSuspensionForces(const FVector& LinearVelocity, const FVector& AngularVelocityRad, const FVector& WorldCenterOfMass, const FVector& WorldSuspensionNormal, const TArray<FVector> WorldSuspensionOrigins, const TArray<FSimpleSuspensionSpringParams>& SpringParams, const TArray<float>& SpringDisplacements, FVector& OutTotalForce, FVector& OutTotalTorque, TArray<float>& OutSpringForces);
194
195 static void ComputeSuspensionForces(const FVector& LinearVelocity, const FVector& AngularVelocityRad, const FSimpleSuspensionState& SuspensionState, const TArray<FSimpleSuspensionSpringParams>& SpringParams, FSimpleSuspensionState& OutSuspensionState);
196
198 static void IntegrateSpring(const float DeltaTime, const float SpringDisplacement, const float SpringVelocity, const FSimpleSuspensionSpringParams& SpringParams, const float SprungMass, float& OutNewSpringDisplacement, float& OutNewSpringVelocity);
199
203
204private:
205
206 static bool ErrCheck(const bool bCondition, const FString& Message, FString* ErrMsg);
207};
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
const bool
Definition NetworkReplayStreaming.h:178
const FSimpleSuspensionRaycast SimpleSuspensionRaycastGroundPlane
Definition SimpleSuspension.h:65
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Array.h:670
Definition ContainerAllocationPolicies.h:1276
Definition AndroidPlatformMisc.h:14
Definition SimpleSuspension.h:119
static void IntegrateSpring(const float DeltaTime, const float SpringDisplacement, const float SpringVelocity, const FSimpleSuspensionSpringParams &SpringParams, const float SprungMass, float &OutNewSpringDisplacement, float &OutNewSpringVelocity)
Definition SimpleSuspension.cpp:529
static float ComputeSpringForce(const float SpringStiffness, const float SpringDamping, const float SpringDisplacement, const float SpringVelocity)
Definition SimpleSuspension.cpp:487
static void ComputeSpringParams(const TArray< FVector > &LocalSuspensionOrigins, const FVector &LocalCenterOfMass, const float TotalMass, const FVector &LocalSuspensionNormal, const float LocalGroundDistance, const float NaturalFrequency, const float DampingRatio, const float Gravity, TArray< FSimpleSuspensionSpringParams > &OutSpringParams)
Definition SimpleSuspension.cpp:403
static void ComputeWorldSuspensionCoordinates(const FVector &LocalCenterOfMass, const FVector &LocalSuspensionNormal, const TArray< FVector > &LocalSuspensionOrigins, const FTransform &LocalToWorld, FVector &OutWorldCenterOfMass, FVector &OutWorldSuspensionNormal, TArray< FVector > &OutWorldSuspensionOrigins)
Definition SimpleSuspension.cpp:438
static void ComputeSuspensionDisplacements(const TArray< FVector > WorldSuspensionOrigins, const TArray< FSimpleSuspensionSpringParams > &SpringParams, const FVector &WorldSuspensionNormal, const FSimpleSuspensionRaycast &RaycastFunction, TArray< float > &OutSpringDisplacements)
Definition SimpleSuspension.cpp:455
static void ComputeSpringNaturalFrequencyAndDampingRatio(const float SprungMass, const float SpringStiffness, const float SpringDamping, float &OutNaturalFrequency, float &OutDampingRatio)
Definition SimpleSuspension.cpp:361
static float ComputeSpringRestLength(const float SpringStiffness, const float SprungMass, const float SuspendedLength, const float Gravity)
Definition SimpleSuspension.cpp:384
static void ComputeSuspensionForces(const FVector &LinearVelocity, const FVector &AngularVelocityRad, const FVector &WorldCenterOfMass, const FVector &WorldSuspensionNormal, const TArray< FVector > WorldSuspensionOrigins, const TArray< FSimpleSuspensionSpringParams > &SpringParams, const TArray< float > &SpringDisplacements, FVector &OutTotalForce, FVector &OutTotalTorque, TArray< float > &OutSpringForces)
Definition SimpleSuspension.cpp:494
static void IntegrateSprings(const float DeltaTime, const TArray< float > &SpringDisplacements, const TArray< float > &SpringVelocities, const TArray< FSimpleSuspensionSpringParams > &SuspensionParams, const TArray< float > &SprungMasses, TArray< float > &OutNewSpringDisplacements, TArray< float > &OutNewSpringVelocities)
Definition SimpleSuspension.cpp:556
static ENGINE_API bool ComputeSprungMasses(const TArray< FVector > &MassSpringPositions, const float TotalMass, TArray< float > &OutSprungMasses, FString *ErrMsg=nullptr)
Definition SimpleSuspension.cpp:76
static float ComputeSpringDamping(const float SprungMass, const float NaturalFrequency, const float DampingRatio)
Definition SimpleSuspension.cpp:374
static float ComputeSpringStiffness(const float SprungMass, const float NaturalFrequency)
Definition SimpleSuspension.cpp:369
static bool ComputeSingleAxisLambda(const FVector::FReal AxisDot, const FVector::FReal SumAxis, const uint32 Count, TArray< FVector::FReal, TFixedAllocator< 2 > > &Lambdas, FString *ErrMsg=nullptr)
Definition SimpleSuspension.cpp:47
static float ComputeSpringCriticalDamping(const float SprungMass, const float NaturalFrequency)
Definition SimpleSuspension.cpp:379
Definition SimpleSuspension.h:26
float LocalGroundDistance
Definition SimpleSuspension.h:39
float NaturalFrequency
Definition SimpleSuspension.h:40
TArray< FSimpleSuspensionSpringParams > SpringParams
Definition SimpleSuspension.h:35
float DampingRatio
Definition SimpleSuspension.h:41
FVector LocalCenterOfMass
Definition SimpleSuspension.h:37
FVector LocalSuspensionNormal
Definition SimpleSuspension.h:38
FSimpleSuspensionParams()
Definition SimpleSuspension.h:27
TArray< FVector > LocalSpringOrigins
Definition SimpleSuspension.h:36
Definition SimpleSuspension.h:11
float Length
Definition SimpleSuspension.h:21
FSimpleSuspensionSpringParams()
Definition SimpleSuspension.h:12
float Stiffness
Definition SimpleSuspension.h:19
float Damping
Definition SimpleSuspension.h:20
float Mass
Definition SimpleSuspension.h:22
Definition SimpleSuspension.h:45
FVector TotalForce
Definition SimpleSuspension.h:57
TArray< float > SpringForces
Definition SimpleSuspension.h:54
FVector TotalTorqueRad
Definition SimpleSuspension.h:58
TArray< FVector > WorldSpringOrigins
Definition SimpleSuspension.h:56
FSimpleSuspensionState()
Definition SimpleSuspension.h:46
TArray< bool > SpringContacts
Definition SimpleSuspension.h:55
TArray< float > SpringDisplacements
Definition SimpleSuspension.h:53
FVector WorldSuspensionNormal
Definition SimpleSuspension.h:60
FVector WorldCenterOfMass
Definition SimpleSuspension.h:59
Definition SimpleSuspension.h:86
FSimpleSuspensionParams SuspensionParams
Definition SimpleSuspension.h:95
void ComputeSpringParams(const float TotalMass, const float Gravity)
Definition SimpleSuspension.cpp:30
void Setup(const FSimpleSuspensionParams &InSuspensionParams)
Definition SimpleSuspension.cpp:13
FSimpleSuspension()
Definition SimpleSuspension.h:87
FSimpleSuspension(const FSimpleSuspensionParams &SuspensionParams)
Definition SimpleSuspension.h:90
FSimpleSuspensionState SuspensionState
Definition SimpleSuspension.h:96
static UE_FORCEINLINE_HINT double DotProduct(const TVector< double > &A, const TVector< double > &B)
Definition Vector.h:1559
static CORE_API const TVector< double > UpVector
Definition Vector.h:85
double FReal
Definition Vector.h:55