UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimNode_SequenceEvaluator.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"
9#include "AnimNode_SequenceEvaluator.generated.h"
10
11UENUM(BlueprintType)
13{
23}
24
25// Abstract base class. Evaluates a point in an anim sequence, using a specific time input rather than advancing time internally.
26// Typically the playback position of the animation for this node will represent something other than time, like jump height.
27// This node will not trigger any notifies present in the associated sequence.
28USTRUCT(BlueprintInternalUseOnly)
30{
32
33private:
34 bool bReinitialized = false;
35
36public:
37 // FAnimNode_AssetPlayerBase interface
38 ANIMGRAPHRUNTIME_API virtual float GetCurrentAssetTime() const override;
39 ANIMGRAPHRUNTIME_API virtual float GetCurrentAssetLength() const override;
40 // End of FAnimNode_AssetPlayerBase interface
41
42 // FAnimNode_Base interface
43 ANIMGRAPHRUNTIME_API virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;
44 ANIMGRAPHRUNTIME_API virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override;
45 ANIMGRAPHRUNTIME_API virtual void UpdateAssetPlayer(const FAnimationUpdateContext& Context) override;
46 ANIMGRAPHRUNTIME_API virtual void Evaluate_AnyThread(FPoseContext& Output) override;
47 ANIMGRAPHRUNTIME_API virtual void GatherDebugData(FNodeDebugData& DebugData) override;
48 // End of FAnimNode_Base interface
49
50 // FAnimNode_AssetPlayerBase Interface
51 virtual float GetAccumulatedTime() const override {return GetExplicitTime();}
52 virtual void SetAccumulatedTime(float NewTime) override { SetExplicitTime(NewTime); }
53 virtual UAnimationAsset* GetAnimAsset() const override { return GetSequence(); }
54 // End of FAnimNode_AssetPlayerBase Interface
55
56 void SetExplicitPreviousTime(float PreviousTime) { InternalTimeAccumulator = PreviousTime; }
57
58 // Get the effective delta time between the previous and current frame internal time
59 ANIMGRAPHRUNTIME_API virtual float GetEffectiveDeltaTime(float ExplicitTime, float PrevExplicitTime) const;
60
61 // Set the animation sequence asset to evaluate
62 virtual bool SetSequence(UAnimSequenceBase* InSequence) { return false; }
63
64 // Set the time at which to evaluate the associated sequence
65 virtual bool SetExplicitTime(float InTime) { return false; }
66
67 // Set whether to teleport to explicit time when it is set
69
72
73 // The animation sequence asset to evaluate
74 virtual UAnimSequenceBase* GetSequence() const { return nullptr; }
75
76 // The time at which to evaluate the associated sequence
77 virtual float GetExplicitTime() const { return 0.0f; }
78
80 UE_DEPRECATED(5.3, "Please use IsLooping instead.")
81 virtual bool GetShouldLoop() const final { return IsLooping(); }
82
83 // Set the animation to continue looping when it reaches the end
84 virtual bool SetShouldLoop(bool bInShouldLoop) { return false; }
85
89 virtual bool GetTeleportToExplicitTime() const { return true; }
90
93
94 // The start up position, it only applies when ReinitializationBehavior == StartPosition. Only used when bTeleportToExplicitTime is false.
95 virtual float GetStartPosition() const { return 0.0f; }
96
97 // Called after executing the input pins, split for subclass convenience.
98 ANIMGRAPHRUNTIME_API void PostExposedInputsUpdateAssetPlayer(const FAnimationUpdateContext& Context);
99
100};
101
102// Sequence evaluator node that can be used with constant folding
103USTRUCT(BlueprintInternalUseOnly)
105{
107
108private:
109 friend class UAnimGraphNode_SequenceEvaluator;
110
111#if WITH_EDITORONLY_DATA
112 // The group name that we synchronize with (NAME_None if it is not part of any group).
113 UPROPERTY(EditAnywhere, Category=Sync, meta=(FoldProperty))
114 FName GroupName = NAME_None;
115
116 // The role this node can assume within the group (ignored if GroupName is not set)
117 UPROPERTY(EditAnywhere, Category=Sync, meta=(FoldProperty))
118 TEnumAsByte<EAnimGroupRole::Type> GroupRole = EAnimGroupRole::CanBeLeader;
119
120 // How this node will synchronize with other animations.
121 UPROPERTY(EditAnywhere, Category=Sync, meta=(FoldProperty))
123
124 // If true, "Relevant anim" nodes that look for the highest weighted animation in a state will ignore this node
125 UPROPERTY(EditAnywhere, Category=Relevancy, meta=(FoldProperty, PinHiddenByDefault))
126 bool bIgnoreForRelevancyTest = false;
127
128 // The animation sequence asset to evaluate
129 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault, FoldProperty))
130 TObjectPtr<UAnimSequenceBase> Sequence = nullptr;
131
132 // The time at which to evaluate the associated sequence
133 UPROPERTY(EditAnywhere, Category=Settings, meta=(PinShownByDefault, FoldProperty, EditCondition="!bUseExplicitFrame"))
134 float ExplicitTime = 0.0f;
135
136 // Whether to use ExplicitFrame (true) or ExplicitTime (false) when evaluating the associated sequence
137 UPROPERTY(EditAnywhere, Category=Settings, meta=(NeverAsPin, FoldProperty))
138 bool bUseExplicitFrame = false;
139
140 // The frame at which to evaluate the associated sequence
141 UPROPERTY(EditAnywhere, Category=Settings, meta=(PinHiddenByDefault, FoldProperty, EditCondition="bUseExplicitFrame"))
142 int32 ExplicitFrame = 0;
143
145 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault, FoldProperty))
146 bool bShouldLoop = true;
147
151 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault, FoldProperty))
152 bool bTeleportToExplicitTime = true;
153
155 UPROPERTY(EditAnywhere, Category = Settings, meta=(DisplayAfter="StartPosition", FoldProperty))
156 TEnumAsByte<ESequenceEvalReinit::Type> ReinitializationBehavior = ESequenceEvalReinit::ExplicitTime;
157
158 // The start up position, it only applies when ReinitializationBehavior == StartPosition. Only used when bTeleportToExplicitTime is false.
159 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault, FoldProperty))
160 float StartPosition = 0.0f;
161#endif
162
163public:
164 // FAnimNode_SequenceEvaluatorBase interface
165 ANIMGRAPHRUNTIME_API virtual bool SetSequence(UAnimSequenceBase* InSequence) override;
166 ANIMGRAPHRUNTIME_API virtual UAnimSequenceBase* GetSequence() const override;
167 ANIMGRAPHRUNTIME_API virtual float GetExplicitTime() const override;
168 ANIMGRAPHRUNTIME_API virtual bool SetExplicitTime(float InTime) override;
169 ANIMGRAPHRUNTIME_API virtual bool SetShouldLoop(bool bInShouldLoop) override;
170 ANIMGRAPHRUNTIME_API virtual bool GetTeleportToExplicitTime() const override;
171 ANIMGRAPHRUNTIME_API virtual TEnumAsByte<ESequenceEvalReinit::Type> GetReinitializationBehavior() const override;
172 ANIMGRAPHRUNTIME_API virtual float GetStartPosition() const override;
173
174 // FAnimNode_AssetPlayerBase interface
175 ANIMGRAPHRUNTIME_API virtual FName GetGroupName() const override;
176 ANIMGRAPHRUNTIME_API virtual EAnimGroupRole::Type GetGroupRole() const override;
177 ANIMGRAPHRUNTIME_API virtual EAnimSyncMethod GetGroupMethod() const override;
178 ANIMGRAPHRUNTIME_API virtual bool GetIgnoreForRelevancyTest() const override;
179 ANIMGRAPHRUNTIME_API virtual bool IsLooping() const override;
180 ANIMGRAPHRUNTIME_API virtual bool SetGroupName(FName InGroupName) override;
181 ANIMGRAPHRUNTIME_API virtual bool SetGroupRole(EAnimGroupRole::Type InRole) override;
182 ANIMGRAPHRUNTIME_API virtual bool SetGroupMethod(EAnimSyncMethod InMethod) override;
183 ANIMGRAPHRUNTIME_API virtual bool SetIgnoreForRelevancyTest(bool bInIgnoreForRelevancyTest) override;
184
185 ANIMGRAPHRUNTIME_API bool ShouldUseExplicitFrame() const;
186 ANIMGRAPHRUNTIME_API bool SetShouldUseExplicitFrame(bool bFlag);
187 ANIMGRAPHRUNTIME_API bool SetExplicitFrame(int32 InFrame);
188 ANIMGRAPHRUNTIME_API int32 GetExplicitFrame() const;
189};
190
191// Sequence evaluator node that can be used standalone (without constant folding)
192USTRUCT(BlueprintInternalUseOnly)
194{
196
197private:
198 // The group name that we synchronize with (NAME_None if it is not part of any group).
199 UPROPERTY(EditAnywhere, Category=Sync)
200 FName GroupName = NAME_None;
201
202 // The role this node can assume within the group (ignored if GroupName is not set)
203 UPROPERTY(EditAnywhere, Category=Sync)
204 TEnumAsByte<EAnimGroupRole::Type> GroupRole = EAnimGroupRole::CanBeLeader;
205
206 // How this node will synchronize with other animations.
207 UPROPERTY(EditAnywhere, Category=Sync)
209
210 // If true, "Relevant anim" nodes that look for the highest weighted animation in a state will ignore this node
211 UPROPERTY(EditAnywhere, Category=Relevancy, meta=(PinHiddenByDefault))
212 bool bIgnoreForRelevancyTest = false;
213
214 // The animation sequence asset to evaluate
215 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault))
216 TObjectPtr<UAnimSequenceBase> Sequence = nullptr;
217
218 // The time at which to evaluate the associated sequence
219 UPROPERTY(EditAnywhere, Category=Settings, meta=(PinShownByDefault, EditCondition="!bUseFrame"))
220 float ExplicitTime = 0.0f;
221
222 UPROPERTY(EditAnywhere, Category=Settings, meta=(NeverAsPin))
223 bool bUseExplicitFrame = false;
224
225 UPROPERTY(EditAnywhere, Category=Settings, meta=(PinHiddenByDefault, EditCondition="bUseFrame"))
226 int32 ExplicitFrame = 0;
227
229 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault))
230 bool bShouldLoop = true;
231
235 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault))
236 bool bTeleportToExplicitTime = true;
237
239 UPROPERTY(EditAnywhere, Category = Settings, meta=(DisplayAfter="StartPosition"))
241
242 // The start up position, it only applies when ReinitializationBehavior == StartPosition. Only used when bTeleportToExplicitTime is false.
243 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinHiddenByDefault))
244 float StartPosition = 0.0f;
245
246public:
247 // FAnimNode_SequenceEvaluatorBase interface
248 virtual bool SetSequence(UAnimSequenceBase* InSequence) override { Sequence = InSequence; return true; }
249 virtual bool SetExplicitTime(float InTime) override { ExplicitTime = InTime; return true; }
250 virtual void SetTeleportToExplicitTime(bool bInTeleport) override { bTeleportToExplicitTime = bInTeleport; }
252 virtual UAnimSequenceBase* GetSequence() const override { return Sequence; }
253 virtual float GetExplicitTime() const override
254 {
255 if(ShouldUseExplicitFrame())
256 {
257 if(const UAnimSequenceBase* SequenceBase = GetSequence())
258 {
259 return SequenceBase->GetSamplingFrameRate().AsSeconds(ExplicitFrame);
260 }
261
262 return 0.f;
263 }
264 return ExplicitTime;
265 }
266 virtual bool GetTeleportToExplicitTime() const override { return bTeleportToExplicitTime; }
267 virtual TEnumAsByte<ESequenceEvalReinit::Type> GetReinitializationBehavior() const override { return ReinitializationBehavior; }
268 virtual float GetStartPosition() const override { return StartPosition; }
269
270 // FAnimNode_AssetPlayerBase interface
271 virtual FName GetGroupName() const override { return GroupName; }
272 virtual EAnimGroupRole::Type GetGroupRole() const override { return GroupRole; }
273 virtual EAnimSyncMethod GetGroupMethod() const override { return Method; }
274 virtual bool GetIgnoreForRelevancyTest() const override { return bIgnoreForRelevancyTest; }
275 virtual bool IsLooping() const override { return bShouldLoop; }
276 virtual bool SetGroupName(FName InGroupName) override { GroupName = InGroupName; return true; }
277 virtual bool SetGroupRole(EAnimGroupRole::Type InRole) override { GroupRole = InRole; return true; }
278 virtual bool SetGroupMethod(EAnimSyncMethod InMethod) override { Method = InMethod; return true; }
279 virtual bool SetIgnoreForRelevancyTest(bool bInIgnoreForRelevancyTest) override { bIgnoreForRelevancyTest = bInIgnoreForRelevancyTest; return true; }
280
281 bool ShouldUseExplicitFrame() const { return bUseExplicitFrame; }
282 void SetShouldUseExplicitFrame(bool bFlag) { bUseExplicitFrame = bFlag; }
283 void SetExplicitFrame(int32 InFrame) { ExplicitFrame = InFrame; }
284 int32 GetExplicitFrame() const { return ExplicitFrame; }
285};
EAnimSyncMethod
Definition AnimationAsset.h:629
#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_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
Definition NameTypes.h:617
Definition EnumAsByte.h:22
Definition AnimSequenceBase.h:37
Definition AnimationAsset.h:1020
Definition AnimNode_SequenceEvaluator.h:13
Type
Definition AnimNode_SequenceEvaluator.h:15
@ ExplicitTime
Definition AnimNode_SequenceEvaluator.h:21
@ StartPosition
Definition AnimNode_SequenceEvaluator.h:19
@ NoReset
Definition AnimNode_SequenceEvaluator.h:17
@ false
Definition radaudio_common.h:23
Definition AnimNode_AssetPlayerBase.h:15
Definition AnimNode_SequenceEvaluator.h:30
virtual bool GetTeleportToExplicitTime() const
Definition AnimNode_SequenceEvaluator.h:89
virtual float GetExplicitTime() const
Definition AnimNode_SequenceEvaluator.h:77
virtual float GetAccumulatedTime() const override
Definition AnimNode_SequenceEvaluator.h:51
virtual void SetReinitializationBehavior(TEnumAsByte< ESequenceEvalReinit::Type > InBehavior)
Definition AnimNode_SequenceEvaluator.h:71
virtual bool SetShouldLoop(bool bInShouldLoop)
Definition AnimNode_SequenceEvaluator.h:84
void SetExplicitPreviousTime(float PreviousTime)
Definition AnimNode_SequenceEvaluator.h:56
virtual UAnimationAsset * GetAnimAsset() const override
Definition AnimNode_SequenceEvaluator.h:53
virtual UAnimSequenceBase * GetSequence() const
Definition AnimNode_SequenceEvaluator.h:74
virtual bool SetSequence(UAnimSequenceBase *InSequence)
Definition AnimNode_SequenceEvaluator.h:62
virtual float GetStartPosition() const
Definition AnimNode_SequenceEvaluator.h:95
virtual TEnumAsByte< ESequenceEvalReinit::Type > GetReinitializationBehavior() const
Definition AnimNode_SequenceEvaluator.h:92
virtual bool SetExplicitTime(float InTime)
Definition AnimNode_SequenceEvaluator.h:65
virtual void SetAccumulatedTime(float NewTime) override
Definition AnimNode_SequenceEvaluator.h:52
virtual void SetTeleportToExplicitTime(bool bInTeleport)
Definition AnimNode_SequenceEvaluator.h:68
Definition AnimNode_SequenceEvaluator.h:194
virtual bool SetSequence(UAnimSequenceBase *InSequence) override
Definition AnimNode_SequenceEvaluator.h:248
virtual EAnimGroupRole::Type GetGroupRole() const override
Definition AnimNode_SequenceEvaluator.h:272
virtual FName GetGroupName() const override
Definition AnimNode_SequenceEvaluator.h:271
virtual UAnimSequenceBase * GetSequence() const override
Definition AnimNode_SequenceEvaluator.h:252
virtual void SetTeleportToExplicitTime(bool bInTeleport) override
Definition AnimNode_SequenceEvaluator.h:250
virtual bool SetGroupMethod(EAnimSyncMethod InMethod) override
Definition AnimNode_SequenceEvaluator.h:278
virtual bool SetGroupRole(EAnimGroupRole::Type InRole) override
Definition AnimNode_SequenceEvaluator.h:277
virtual bool SetExplicitTime(float InTime) override
Definition AnimNode_SequenceEvaluator.h:249
virtual float GetExplicitTime() const override
Definition AnimNode_SequenceEvaluator.h:253
virtual void SetReinitializationBehavior(TEnumAsByte< ESequenceEvalReinit::Type > InBehavior) override
Definition AnimNode_SequenceEvaluator.h:251
int32 GetExplicitFrame() const
Definition AnimNode_SequenceEvaluator.h:284
virtual EAnimSyncMethod GetGroupMethod() const override
Definition AnimNode_SequenceEvaluator.h:273
virtual bool SetIgnoreForRelevancyTest(bool bInIgnoreForRelevancyTest) override
Definition AnimNode_SequenceEvaluator.h:279
void SetShouldUseExplicitFrame(bool bFlag)
Definition AnimNode_SequenceEvaluator.h:282
virtual bool IsLooping() const override
Definition AnimNode_SequenceEvaluator.h:275
bool ShouldUseExplicitFrame() const
Definition AnimNode_SequenceEvaluator.h:281
virtual bool GetIgnoreForRelevancyTest() const override
Definition AnimNode_SequenceEvaluator.h:274
virtual float GetStartPosition() const override
Definition AnimNode_SequenceEvaluator.h:268
virtual bool SetGroupName(FName InGroupName) override
Definition AnimNode_SequenceEvaluator.h:276
virtual TEnumAsByte< ESequenceEvalReinit::Type > GetReinitializationBehavior() const override
Definition AnimNode_SequenceEvaluator.h:267
void SetExplicitFrame(int32 InFrame)
Definition AnimNode_SequenceEvaluator.h:283
virtual bool GetTeleportToExplicitTime() const override
Definition AnimNode_SequenceEvaluator.h:266
Definition AnimNode_SequenceEvaluator.h:105
Definition AnimNodeBase.h:337
Definition AnimNodeBase.h:324
Definition AnimNodeBase.h:354
Definition AnimNodeBase.h:642
Definition AnimNodeBase.h:479
Definition ObjectPtr.h:488