UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimCompositeBase.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
10#include "CoreMinimal.h"
13#include "HAL/IConsoleManager.h"
14#include "AnimCompositeBase.generated.h"
15
17class UAnimSequence;
18struct FCompactPose;
19
20#if WITH_EDITOR
21namespace UE { namespace Anim
22{
24}}
25
26#endif // WITH_EDITOR
27
33USTRUCT()
35{
37
38
39 UPROPERTY()
41
43 UPROPERTY()
44 float StartPosition;
45
47 UPROPERTY()
48 float EndPosition;
49
51 : AnimSequence(nullptr)
52 , StartPosition(0.f)
53 , EndPosition(0.f)
54 {
55 }
56
58 : AnimSequence(InAnimSequence)
59 , StartPosition(InStartPosition)
60 , EndPosition(InEndPosition)
61 {
62 }
63};
64
66USTRUCT()
68{
70
71 FAnimSegment(const FAnimSegment&) = default;
73 FAnimSegment& operator=(const FAnimSegment&) = default;
74 FAnimSegment& operator=(FAnimSegment&&) = default;
75
76#if WITH_EDITORONLY_DATA
77 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "Cached Animation Asset length"))
79#endif
80
81#if WITH_EDITOR
82 friend class UEditorAnimSegment;
83 friend class UEditorAnimCompositeSegment;
85#endif // WITH_EDITOR
86
87protected:
89 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "Animation Reference"))
91public:
92
93 ENGINE_API void SetAnimReference(UAnimSequenceBase* InAnimReference, bool bInitialize = false);
94 const TObjectPtr<UAnimSequenceBase>& GetAnimReference() const
95 {
96 return AnimReference;
97 }
98
99#if WITH_EDITOR
101#endif // WITH_EDITOR
102
104 UPROPERTY(VisibleAnywhere, Category=AnimSegment, meta=(DisplayName = "Starting Position"))
105 float StartPos;
106
108 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "Start Time"))
109 float AnimStartTime;
110
112 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "End Time"))
113 float AnimEndTime;
114
116 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "Play Rate"))
117 float AnimPlayRate;
118
119 UPROPERTY(EditAnywhere, Category=AnimSegment, meta=(DisplayName = "Loop Count"))
120 int32 LoopingCount;
121
123 : AnimReference(nullptr)
124 , StartPos(0.f)
125 , AnimStartTime(0.f)
126 , AnimEndTime(0.f)
127 , AnimPlayRate(1.f)
128 , LoopingCount(1)
129 , bValid(true)
130 {
131 }
132
134 float GetValidPlayRate() const
135 {
136 float SeqPlayRate = AnimReference ? AnimReference->RateScale : 1.0f;
137 float FinalPlayRate = SeqPlayRate * AnimPlayRate;
139 }
140
141 float GetLength() const
142 {
143 return (float(LoopingCount) * (AnimEndTime - AnimStartTime)) / FMath::Abs(GetValidPlayRate());
144 }
145
147 float GetEndPos() const
148 {
149 return StartPos + GetLength();
150 }
151
152 bool IsInRange(float CurPos) const
153 {
154 return ((CurPos >= StartPos) && (CurPos <= GetEndPos()));
155 }
156
157 /*
158 * Return true if it's included within the input range
159 */
160 bool IsIncluded(float InStartPos, float InEndPos) const
161 {
162 float EndPos = StartPos + GetLength();
163 // InStartPos is between Start and End, it is included
165 {
166 return true;
167 }
168 // InEndPos is between Start and End, it is also included
170 {
171 return true;
172 }
173 // if it is within Start and End, it is also included
174 if (StartPos >= InStartPos && EndPos <= InEndPos)
175 {
176 return true;
177 }
178
179 return false;
180 }
184 ENGINE_API UAnimSequenceBase* GetAnimationData(float PositionInTrack, float& PositionInAnim) const;
185
188 ENGINE_API float ConvertTrackPosToAnimPos(const float& TrackPosition) const;
189
196 ENGINE_API void GetAnimNotifiesFromTrackPositions(const float& PreviousTrackPosition, const float& CurrentTrackPosition, FAnimNotifyContext& NotifyContext) const;
197
203 void GetRootMotionExtractionStepsForTrackRange(TArray<FRootMotionExtractionStep> & RootMotionExtractionSteps, const float StartPosition, const float EndPosition) const;
204
208 bool IsValid() const { return bValid; }
209
213 bool IsNotifyAvailable() const { return IsValid() && AnimReference && AnimReference->IsNotifyAvailable(); }
214private:
215
219 bool bValid;
220
221 friend struct FAnimTrack;
222};
223
228USTRUCT()
230{
232
233 UPROPERTY(EditAnywhere, Category=AnimTrack, EditFixedSize)
235
237 ENGINE_API float GetLength() const;
238 ENGINE_API bool IsAdditive() const;
239 bool IsRotationOffsetAdditive() const;
240
242
244 bool HasRootMotion() const;
245
252
255
258
261
265
268
271
272#if WITH_EDITOR
275
280
283
285 class UAnimSequence* GetAdditiveBasePose() const;
286#endif
287
288 // this is to prevent anybody adding recursive asset to anim composite
289 // as a result of anim composite being a part of anim sequence base
290 void InvalidateRecursiveAsset(class UAnimCompositeBase* CheckAsset);
291
292 // this is recursive function that look thorough internal assets
293 // and clear the reference if recursive is found.
294 // We're going to remove the top reference if found
295 bool ContainRecursive(const TArray<UAnimCompositeBase*>& CurrentAccumulatedList);
296
303 ENGINE_API void GetAnimNotifiesFromTrackPositions(const float& PreviousTrackPosition, const float& CurrentTrackPosition, FAnimNotifyContext& NotifyContext) const;
304
306 bool IsNotifyAvailable() const;
307
308 ENGINE_API int32 GetTotalBytesUsed() const;
309};
310
311UCLASS(abstract, MinimalAPI)
313{
315
316 //~ Begin UObject Interface
317 virtual void PostLoad() override;
318 //~ End UObject Interface
319
320 //~ Begin UAnimSequenceBase Interface
321 virtual FFrameRate GetSamplingFrameRate() const override;
322 //~ End UAnimSequenceBase Interface
323
324 // Extracts root motion from the supplied FAnimTrack between the Start End range specified
325 UE_DEPRECATED(5.6, "Use static ExtractRootMotionFromTrack with FAnimExtractionContext")
326 void ExtractRootMotionFromTrack(const FAnimTrack &SlotAnimTrack, float StartTrackPosition, float EndTrackPosition, FRootMotionMovementParams &RootMotion) const { FAnimExtractContext Context; ExtractRootMotionFromTrack(SlotAnimTrack, StartTrackPosition, EndTrackPosition, Context, RootMotion); }
327
328 ENGINE_API void ExtractRootMotionFromTrack(const FAnimTrack &SlotAnimTrack, float StartTrackPosition, float EndTrackPosition, const FAnimExtractContext& Context, FRootMotionMovementParams& RootMotion) const;
329
330 // this is to prevent anybody adding recursive asset to anim composite
331 // as a result of anim composite being a part of anim sequence base
332 virtual void InvalidateRecursiveAsset() PURE_VIRTUAL(UAnimCompositeBase::InvalidateRecursiveAsset, );
333
334 // this is recursive function that look thorough internal assets
335 // and clear the reference if recursive is found.
336 // We're going to remove the top reference if found
337 virtual bool ContainRecursive(TArray<UAnimCompositeBase*>& CurrentAccumulatedList) PURE_VIRTUAL(UAnimCompositeBase::ContainRecursive, return false; );
338
339 virtual void SetCompositeLength(float InLength) PURE_VIRTUAL(UAnimCompositeBase::SetCompositeLength, );
340
341#if WITH_EDITOR
342 virtual void PopulateWithExistingModel(TScriptInterface<IAnimationDataModel> ExistingDataModel) override;
343
344 virtual void UpdateCommonTargetFrameRate() PURE_VIRTUAL(UAnimCompositeBase::UpdateCommonTargetFrameRate, );
345#endif // WITH_EDITOR
346 FFrameRate GetCommonTargetFrameRate() const { return CommonTargetFrameRate; }
347protected:
349 UPROPERTY(VisibleAnywhere, Category = AnimationComposite)
350 FFrameRate CommonTargetFrameRate;
351};
352
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
return true
Definition ExternalRpcRegistry.cpp:601
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
Definition Text.h:385
Definition Array.h:670
Definition IConsoleManager.h:1792
Definition UnrealString.h.inl:34
Definition ScriptInterface.h:139
Definition AnimCompositeBase.h:313
Definition AnimSequenceBase.h:37
virtual ENGINE_API bool IsNotifyAvailable() const
Definition AnimSequenceBase.cpp:378
Definition AnimSequence.h:203
ENGINE_API void GetAdditiveBasePose(FAnimationPoseData &OutAnimationPoseData, const FAnimExtractContext &ExtractionContext) const
Definition AnimSequence.cpp:1917
virtual FFrameRate GetSamplingFrameRate() const override
Definition AnimSequence.h:410
Type
Definition AnimEnums.h:14
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition AnimationAsset.h:267
Definition AnimNotifyQueue.h:149
Definition AnimCompositeBase.h:68
bool IsIncluded(float InStartPos, float InEndPos) const
Definition AnimCompositeBase.h:160
float GetValidPlayRate() const
Definition AnimCompositeBase.h:134
bool IsNotifyAvailable() const
Definition AnimCompositeBase.h:213
bool IsInRange(float CurPos) const
Definition AnimCompositeBase.h:152
float GetEndPos() const
Definition AnimCompositeBase.h:147
float GetLength() const
Definition AnimCompositeBase.h:141
bool IsValid() const
Definition AnimCompositeBase.h:208
Definition AnimCompositeBase.h:230
ENGINE_API int32 GetSegmentIndexAtTime(float InTime) const
Definition AnimCompositeBase.cpp:426
ENGINE_API bool IsAdditive() const
Definition AnimCompositeBase.cpp:333
bool HasRootMotion() const
Definition AnimCompositeBase.cpp:256
ENGINE_API void GetRootMotionExtractionStepsForTrackRange(TArray< FRootMotionExtractionStep > &RootMotionExtractionSteps, const float StartTrackPosition, const float EndTrackPosition) const
Definition AnimCompositeBase.cpp:293
ENGINE_API FAnimSegment * GetSegmentAtTime(float InTime)
Definition AnimCompositeBase.cpp:414
ENGINE_API bool IsValidToAdd(const UAnimSequenceBase *SequenceBase, FText *OutReason=nullptr) const
Definition AnimCompositeBase.cpp:655
bool IsRotationOffsetAdditive() const
Definition AnimCompositeBase.cpp:351
TArray< FAnimSegment > AnimSegments
Definition AnimCompositeBase.h:234
ENGINE_API float GetLength() const
Definition AnimCompositeBase.cpp:315
ENGINE_API void GetAnimationPose(FAnimationPoseData &OutAnimationPoseData, const FAnimExtractContext &ExtractionContext) const
Definition AnimCompositeBase.cpp:535
void ValidateSegmentTimes()
Definition AnimCompositeBase.cpp:391
ENGINE_API int32 GetTrackAdditiveType() const
Definition AnimCompositeBase.cpp:372
void EnableRootMotionSettingFromMontage(bool bInEnableRootMotion, const ERootMotionRootLock::Type InRootMotionRootLock)
Definition AnimCompositeBase.cpp:566
Definition AnimationPoseData.h:16
Definition BonePose.h:347
Definition FrameRate.h:21
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
Definition AnimCompositeBase.h:35
FRootMotionExtractionStep(UAnimSequence *InAnimSequence, float InStartPosition, float InEndPosition)
Definition AnimCompositeBase.h:57
Definition AnimationAsset.h:711
Definition ObjectPtr.h:488