UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PhysicsConstraintTemplate.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3//~=============================================================================
4// Complete constraint definition used by rigid body physics.
5//
6// Defaults here will give you a ball and socket joint.
7// Positions are in Physics scale.
8// When adding stuff here, make sure to update URB_ConstraintSetup::CopyConstraintParamsFrom
9//~=============================================================================
10
11#pragma once
12
13#include "CoreMinimal.h"
15#include "UObject/Object.h"
17#include "PhysicsConstraintTemplate.generated.h"
18
19USTRUCT()
21{
23
24 UPROPERTY()
26
27 UPROPERTY(EditAnywhere, Category=Constraint)
28 FName ProfileName;
29};
30
31UCLASS(hidecategories=Object, MinimalAPI)
33{
35
36 UPROPERTY(EditAnywhere, Category=Joint, meta=(ShowOnlyInnerProperties))
37 FConstraintInstance DefaultInstance;
38
40 UPROPERTY()
42
43 //~ Begin UObject Interface.
44 virtual void Serialize(FArchive& Ar) override;
45 //~ End UObject Interface.
46
48 bool ContainsConstraintProfile(FName ProfileName) const
49 {
50 const FPhysicsConstraintProfileHandle* FoundHandle = ProfileHandles.FindByPredicate([ProfileName](const FPhysicsConstraintProfileHandle& ProfileHandle) { return ProfileHandle.ProfileName == ProfileName; });
51 return FoundHandle != nullptr;
52 }
53
54#if WITH_EDITOR
55 void AddConstraintProfile(FName ProfileName)
56 {
58 NewHandle.ProfileName = ProfileName;
59 NewHandle.ProfileProperties = DefaultInstance.ProfileInstance; //Copy current settings into new profile
60 }
61
62 void RemoveConstraintProfile(FName ProfileName)
63 {
64 for(int32 HandleIdx = ProfileHandles.Num() - 1; HandleIdx >= 0; --HandleIdx)
65 {
66 if(ProfileHandles[HandleIdx].ProfileName == ProfileName)
67 {
68 ProfileHandles.RemoveAtSwap(HandleIdx);
69 }
70 }
71 }
72#endif
73
75 void ApplyConstraintProfile(FName ProfileName, FConstraintInstance& CI, bool bDefaultIfNotFound) const
76 {
77 bool bFound = false;
78 if (ProfileName == NAME_None)
79 {
80 CI.CopyProfilePropertiesFrom(DefaultProfile);
81 bFound = true;
82 }
83 else
84 {
85 for(const FPhysicsConstraintProfileHandle& Handle : ProfileHandles)
86 {
87 if(Handle.ProfileName == ProfileName)
88 {
89 CI.CopyProfilePropertiesFrom(Handle.ProfileProperties);
90 bFound = true;
91 break;
92 }
93 }
94 }
95
97 {
98 CI.CopyProfilePropertiesFrom(DefaultProfile);
99 }
100 }
101
106 const FConstraintProfileProperties& GetConstraintProfilePropertiesOrDefault(FName ProfileName) const
107 {
108 if (ProfileName != NAME_None)
109 {
110 for (const FPhysicsConstraintProfileHandle& Handle : ProfileHandles)
111 {
112 if (Handle.ProfileName == ProfileName)
113 {
114 return Handle.ProfileProperties;
115 }
116 }
117 }
118 return DefaultProfile;
119 }
120
121#if WITH_EDITOR
124 {
125 DefaultProfile = CI.ProfileInstance;
126 }
127
128
129 virtual void PostEditChangeChainProperty(FPropertyChangedChainEvent& PropertyChangedEvent) override;
130 virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
131
134
139#endif
140
141
142private:
143 // Only needed for old content! Pre VER_UE4_ALL_PROPS_TO_CONSTRAINTINSTANCE
144 void CopySetupPropsToInstance(FConstraintInstance* Instance);
145
148 FConstraintProfileProperties DefaultProfile;
149
150
151public: //DEPRECATED
152#if WITH_EDITORONLY_DATA
153 UPROPERTY()
155 UPROPERTY()
157 UPROPERTY()
159 UPROPERTY()
161 UPROPERTY()
163 UPROPERTY()
165 UPROPERTY()
167 UPROPERTY()
169 UPROPERTY()
171 UPROPERTY()
173 UPROPERTY()
175 UPROPERTY()
177 UPROPERTY()
179 UPROPERTY()
181 UPROPERTY()
183 UPROPERTY()
185 UPROPERTY()
187 UPROPERTY()
189 UPROPERTY()
191 UPROPERTY()
193 UPROPERTY()
195 UPROPERTY()
197 UPROPERTY()
199 UPROPERTY()
201 UPROPERTY()
203 UPROPERTY()
205 UPROPERTY()
207 UPROPERTY()
209 UPROPERTY()
211 UPROPERTY()
213 UPROPERTY()
215 UPROPERTY()
217 UPROPERTY()
219 UPROPERTY()
221 UPROPERTY()
223#endif
224};
225
226
227
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
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition NameTypes.h:617
Definition Array.h:670
ElementType * FindByPredicate(Predicate Pred)
Definition Array.h:1471
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT void RemoveAtSwap(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2185
ElementType & AddDefaulted_GetRef() UE_LIFETIMEBOUND
Definition Array.h:2815
Definition EnumAsByte.h:22
Definition Object.h:95
Definition PhysicsConstraintTemplate.h:33
Definition ConstraintInstance.h:255
FConstraintProfileProperties ProfileInstance
Definition ConstraintInstance.h:325
Definition ConstraintInstance.h:57
Definition PhysicsConstraintTemplate.h:21
Definition UnrealType.h:7001
Definition UnrealType.h:6865