UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BuiltInAttributeTypes.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"
8#include "AnimationRuntime.h"
9
10#include "Algo/Transform.h"
11
12#include "BuiltInAttributeTypes.generated.h"
13
15USTRUCT(BlueprintType)
17{
19
20 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=FloatAnimationAttribute)
21 float Value = 0.f;
22
24 {
25 Value += Attribute.Value * Weight;
26 }
27
32
34 {
36 Out.Value = Value * Weight;
37 return Out;
38 }
39
41 {
42 Value *= (1.f - Alpha);
43 Value += (Attribute.Value * Alpha);
44 }
45};
46
48USTRUCT(BlueprintType)
50{
52
53 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=IntegerAnimationAttribute)
55
57 {
58 Value += (int32)(Attribute.Value * Weight);
59 }
60
65
67 {
69 Out.Value = (int32)(Value * Weight);
70 return Out;
71 }
72
74 {
75 Value = FMath::TruncToInt32(Value * (1.f - Alpha));
76 Value += FMath::TruncToInt32(Attribute.Value * Alpha);
77 }
78};
79
81USTRUCT(BlueprintType)
83{
85
86 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=StringAnimationAttribute)
87 FString Value;
88};
89
91{
92 return GetTypeHash(Key.Value);
93}
94
96USTRUCT(BlueprintType)
98{
100
101 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TransformAnimationAttribute)
103
105 {
106 //if (FAnimWeight::IsRelevant(Weight))
107 {
109
110 if (AdditiveType == AAT_None)
111 {
112 Value.AccumulateWithShortestRotation(Attribute.Value, VBlendWeight);
113 }
114 else
115 {
117 {
118 Value.AccumulateWithAdditiveScale(Attribute.Value, VBlendWeight);
119 }
120 else
121 {
123 }
124 }
125 }
126 }
127
132
134 {
135 Value.NormalizeRotation();
136 }
137
139 {
141
143 Out.Value = Value * VBlendWeight;
144
145 return Out;
146 }
147
149 {
150 Value.BlendWith(Attribute.Value, Alpha);
151 }
152};
153
154
155USTRUCT(BlueprintType)
157{
159
160 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=VectorAnimationAttribute)
161 FVector Value = FVector::ZeroVector;
162
164 {
165 // if (FAnimWeight::IsRelevant(Weight))
166 {
167 Value += Attribute.Value * Weight;
168 }
169 }
170
175
177 {
178 Value.Normalize();
179 }
180
182 {
184 Out.Value = Value * Weight;
185
186 return Out;
187 }
188
190 {
191 Value = FMath::Lerp<FVector>(Value, Attribute.Value, Alpha);
192 }
193};
194
195USTRUCT(BlueprintType)
197{
199
200 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=QuaternionAnimationAttribute)
201 FQuat Value = FQuat::Identity;
202
204 {
205 // if (FAnimWeight::IsRelevant(Weight))
206 {
207 if (AdditiveType == AAT_None)
208 {
209 const FQuat WeightedRotation = Attribute.Value * Weight;
210
211 // From VectorAccumulateQuaternionShortestPath
212 // Blend rotation
213 // To ensure the 'shortest route', we make sure the dot product between the both rotations is positive.
214 // const float Bias = (|A.B| >= 0 ? 1 : -1)
215 // return A + B * Bias;
217 const FQuat::FReal Bias = FMath::FloatSelect(DotResult, FQuat::FReal(1.0f), FQuat::FReal(-1.0f));
218
219 Value += WeightedRotation * Bias;
220 }
221 else
222 {
223 // Quaternion equivalent of FTransform::BlendFromIdentityAndAccumulate
226 }
227
228 }
229 }
230
232 {
233 Value = Value * BaseAttribute.Value.Inverse();
234 Value.Normalize();
235 }
236
238 {
239 Value.Normalize();
240 }
241
243 {
245 Out.Value = Value * Weight;
246
247 return Out;
248 }
249
254};
255
256USTRUCT()
261
262USTRUCT()
267
268USTRUCT()
273
274USTRUCT()
279
280USTRUCT()
285
286namespace UE
287{
288 namespace Anim
289 {
291 template<>
293 {
294 enum
295 {
297 };
298 };
299
301 template<>
303 {
304 enum
305 {
306 IsBlendable = false,
307 };
308 };
309
311 template<>
313 {
314 enum
315 {
317 };
318 };
319
321 template<>
323 {
324 enum
325 {
327 };
328 };
329
331 template<>
332 struct TAttributeTypeTraits<FNonBlendableQuaternionAnimationAttribute> : public TAttributeTypeTraitsBase<FNonBlendableQuaternionAnimationAttribute>
333 {
334 enum
335 {
336 IsBlendable = false,
337 };
338 };
339
341 template<>
342 struct TAttributeTypeTraits<FNonBlendableVectorAnimationAttribute> : public TAttributeTypeTraitsBase<FNonBlendableVectorAnimationAttribute>
343 {
344 enum
345 {
346 IsBlendable = false,
347 };
348 };
349
351 template<>
352 struct TAttributeTypeTraits<FNonBlendableTransformAnimationAttribute> : public TAttributeTypeTraitsBase<FNonBlendableTransformAnimationAttribute>
353 {
354 enum
355 {
356 IsBlendable = false,
357 };
358 };
359
360 template<>
361 struct TAttributeTypeTraits<FNonBlendableFloatAnimationAttribute> : public TAttributeTypeTraitsBase<FNonBlendableFloatAnimationAttribute>
362 {
363 enum
364 {
365 IsBlendable = false,
366 };
367 };
368
369 template<>
370 struct TAttributeTypeTraits<FNonBlendableIntegerAnimationAttribute> : public TAttributeTypeTraitsBase<FNonBlendableIntegerAnimationAttribute>
371 {
372 enum
373 {
374 IsBlendable = false,
375 };
376 };
377
378#if WITH_EDITOR
380 template<typename AttributeType, typename ValueType>
382 {
383 const FAnimationAttributeIdentifier Identifier = UAnimationAttributeIdentifierExtensions::CreateAttributeIdentifier(AnimSequenceBase, AttributeName, BoneName, AttributeType::StaticStruct());
384
386 if (AnimSequenceBase->GetDataModelInterface()->FindAttribute(Identifier) || Controller.AddAttribute(Identifier))
387 {
389 Algo::Transform(Values, AttributeValues, [](const ValueType& Value)
390 {
391 AttributeType Attribute;
392 Attribute.Value = Value;
393 return Attribute;
394 });
395
396 return Controller.SetTypedAttributeKeys<AttributeType>(Identifier, Keys, MakeArrayView(AttributeValues), bShouldTransact);
397 }
398
399 return false;
400 }
401#endif // WITH_EDITOR
402 }
403}
404
405
406UCLASS()
408{
410
411public:
412#if WITH_EDITOR
413 UFUNCTION(BlueprintCallable, Category = Attributes, meta = (ScriptMethod))
414 static bool AddTransformAttribute(UAnimSequenceBase* AnimSequenceBase, const FName& AttributeName, const FName& BoneName, const TArray<float>& Keys, const TArray<FTransform>& Values)
415 {
416 return UE::Anim::AddTypedCustomAttribute<FTransformAnimationAttribute, FTransform>(AttributeName, BoneName, AnimSequenceBase, MakeArrayView(Keys), MakeArrayView(Values));
417 }
418#endif // WITH_EDITOR
419};
EAdditiveAnimationType
Definition AnimTypes.h:575
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
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
uint32 GetTypeHash(const FStringAnimationAttribute &Key)
Definition BuiltInAttributeTypes.h:90
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define ScalarRegister
Definition ScalarRegister.h:239
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint32_t uint32
Definition binka_ue_file_header.h:6
static ENGINE_API void ConvertTransformToAdditive(FTransform &TargetTrasnform, const FTransform &BaseTransform)
Definition AnimationRuntime.cpp:1083
Definition NameTypes.h:617
Definition IAnimationDataController.h:50
Definition ArrayView.h:139
Definition Array.h:670
Definition AnimSequenceBase.h:37
Definition BlueprintFunctionLibrary.h:16
Definition BuiltInAttributeTypes.h:408
void Transform(const InT &Input, OutT &&Output, TransformT Trans)
Definition Transform.h:66
Definition AdvancedWidgetsModule.cpp:13
static bool IsFullWeight(float InWeight)
Definition AnimTypes.h:672
Definition AttributeIdentifier.h:17
Definition BuiltInAttributeTypes.h:17
FFloatAnimationAttribute Multiply(float Weight) const
Definition BuiltInAttributeTypes.h:33
float Value
Definition BuiltInAttributeTypes.h:21
void Interpolate(const FFloatAnimationAttribute &Attribute, float Alpha)
Definition BuiltInAttributeTypes.h:40
void MakeAdditive(const FFloatAnimationAttribute &BaseAttribute)
Definition BuiltInAttributeTypes.h:28
Definition BuiltInAttributeTypes.h:50
int32 Value
Definition BuiltInAttributeTypes.h:54
void MakeAdditive(const FIntegerAnimationAttribute &BaseAttribute)
Definition BuiltInAttributeTypes.h:61
void Interpolate(const FIntegerAnimationAttribute &Attribute, float Alpha)
Definition BuiltInAttributeTypes.h:73
FIntegerAnimationAttribute Multiply(float Weight) const
Definition BuiltInAttributeTypes.h:66
Definition BuiltInAttributeTypes.h:276
Definition BuiltInAttributeTypes.h:282
Definition BuiltInAttributeTypes.h:258
Definition BuiltInAttributeTypes.h:270
Definition BuiltInAttributeTypes.h:264
Definition BuiltInAttributeTypes.h:197
FQuaternionAnimationAttribute Multiply(const float Weight) const
Definition BuiltInAttributeTypes.h:242
FQuat Value
Definition BuiltInAttributeTypes.h:201
void Interpolate(const FQuaternionAnimationAttribute &Attribute, float Alpha)
Definition BuiltInAttributeTypes.h:250
void MakeAdditive(const FQuaternionAnimationAttribute &BaseAttribute)
Definition BuiltInAttributeTypes.h:231
void Normalize()
Definition BuiltInAttributeTypes.h:237
Definition BuiltInAttributeTypes.h:83
Definition BuiltInAttributeTypes.h:98
void Normalize()
Definition BuiltInAttributeTypes.h:133
FTransform Value
Definition BuiltInAttributeTypes.h:102
void MakeAdditive(const FTransformAnimationAttribute &BaseAttribute)
Definition BuiltInAttributeTypes.h:128
void Interpolate(const FTransformAnimationAttribute &Attribute, float Alpha)
Definition BuiltInAttributeTypes.h:148
FTransformAnimationAttribute Multiply(const float Weight) const
Definition BuiltInAttributeTypes.h:138
Definition BuiltInAttributeTypes.h:157
void Interpolate(const FVectorAnimationAttribute &Attribute, float Alpha)
Definition BuiltInAttributeTypes.h:189
void MakeAdditive(const FVectorAnimationAttribute &BaseAttribute)
Definition BuiltInAttributeTypes.h:171
void Normalize()
Definition BuiltInAttributeTypes.h:176
FVector Value
Definition BuiltInAttributeTypes.h:161
FVectorAnimationAttribute Multiply(const float Weight) const
Definition BuiltInAttributeTypes.h:181
Definition AttributeTraits.h:14
@ RequiresNormalization
Definition AttributeTraits.h:24
@ IsBlendable
Definition AttributeTraits.h:18
@ StepInterpolate
Definition AttributeTraits.h:22
Definition AttributeTraits.h:30
static TQuat< double > FastLerp(const TQuat< double > &A, const TQuat< double > &B, const double Alpha)
Definition Quat.h:1373
TQuat< T > GetNormalized(T Tolerance=UE_SMALL_NUMBER) const
Definition Quat.h:1140
static CORE_API const TQuat< double > Identity
Definition Quat.h:63
double FReal
Definition Quat.h:45
static void BlendFromIdentityAndAccumulate(TTransform< double > &FinalAtom, const TTransform< double > &SourceAtom, float BlendWeight)
Definition TransformNonVectorized.h:1085