UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimNode_SplineIK.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "AlphaBlend.h"
8#include "AnimNode_SplineIK.generated.h"
9
14UENUM()
16{
17 None = 0 UMETA(Hidden),
18 X = 1,
19 Y = 2,
20 Z = 3,
21};
22
24USTRUCT()
47
48USTRUCT(BlueprintInternalUseOnly)
50{
52
53
54 UPROPERTY(EditAnywhere, Category = "Parameters")
55 FBoneReference StartBone;
56
58 UPROPERTY(EditAnywhere, Category = "Parameters")
60
62 UPROPERTY(EditAnywhere, Category = "Parameters")
64
66 UPROPERTY(EditAnywhere, Category = "Parameters")
67 bool bAutoCalculateSpline;
68
70 UPROPERTY(EditAnywhere, Category = "Parameters", meta = (ClampMin = 2, UIMin = 2, EditCondition = "!bAutoCalculateSpline"))
71 int32 PointCount;
72
74 UPROPERTY(EditAnywhere, BlueprintReadWrite, EditFixedSize, Category = "Parameters", meta = (BlueprintCompilerGeneratedDefaults, PinHiddenByDefault))
76
78 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters", meta = (PinHiddenByDefault))
79 float Roll;
80
82 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters", meta = (PinHiddenByDefault))
83 float TwistStart;
84
86 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters", meta = (PinHiddenByDefault))
87 float TwistEnd;
88
90 UPROPERTY(EditAnywhere, Category = "Parameters")
91 FAlphaBlend TwistBlend;
92
97 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters", meta = (PinHiddenByDefault))
98 float Stretch;
99
101 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Parameters", meta = (PinHiddenByDefault))
102 float Offset;
103
105
106 // FAnimNode_Base interface
107 ANIMGRAPHRUNTIME_API virtual void GatherDebugData(FNodeDebugData& DebugData) override;
108 ANIMGRAPHRUNTIME_API virtual void OnInitializeAnimInstance(const FAnimInstanceProxy* InProxy, const UAnimInstance* InAnimInstance) override;
109 virtual bool NeedsOnInitializeAnimInstance() const override { return true; }
110 // End of FAnimNode_Base interface
111
112 // FAnimNode_SkeletalControlBase interface
113 ANIMGRAPHRUNTIME_API virtual void EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext& Output, TArray<FBoneTransform>& OutBoneTransforms) override;
114 ANIMGRAPHRUNTIME_API virtual bool IsValidToEvaluate(const USkeleton* Skeleton, const FBoneContainer& RequiredBones) override;
115 // End of FAnimNode_SkeletalControlBase interface
116
118 const FSplineCurves& GetSplineCurves() const { return BoneSpline; }
119
121 const FSplineCurves& GetTransformedSplineCurves() const { return TransformedSpline; }
122
124 ANIMGRAPHRUNTIME_API FTransform GetTransformedSplinePoint(int32 TransformIndex) const;
125
127 ANIMGRAPHRUNTIME_API FTransform GetControlPoint(int32 TransformIndex) const;
128
130 ANIMGRAPHRUNTIME_API void SetControlPoint(int32 TransformIndex, const FTransform& InTransform);
131
133 ANIMGRAPHRUNTIME_API void SetControlPointLocation(int32 TransformIndex, const FVector& InLocation);
134
136 ANIMGRAPHRUNTIME_API void SetControlPointRotation(int32 TransformIndex, const FQuat& InRotation);
137
139 ANIMGRAPHRUNTIME_API void SetControlPointScale(int32 TransformIndex, const FVector& InScale);
140
142 int32 GetNumControlPoints() const { return ControlPoints.Num(); }
143
145 ANIMGRAPHRUNTIME_API void GatherBoneReferences(const FReferenceSkeleton& RefSkeleton);
146
147protected:
149 ANIMGRAPHRUNTIME_API void BuildBoneSpline(const FReferenceSkeleton& RefSkeleton);
150
151protected:
153 ANIMGRAPHRUNTIME_API void TransformSpline();
154
156 ANIMGRAPHRUNTIME_API float FindParamAtFirstSphereIntersection(const FVector& InOrigin, float InRadius, int32& StartingLinearIndex);
157
158private:
159 // FAnimNode_SkeletalControlBase interface
160 ANIMGRAPHRUNTIME_API virtual void InitializeBoneReferences(const FBoneContainer& RequiredBones) override;
161 // End of FAnimNode_SkeletalControlBase interface
162
164 ANIMGRAPHRUNTIME_API float GetTwist(float InAlpha, float TotalSplineAlpha);
165
167 FSplineCurves TransformedSpline;
168
171
173 FSplineCurves BoneSpline;
174
176 float OriginalSplineLength;
177
179 TArray<FSplineIKCachedBoneData> CachedBoneReferences;
180
182 TArray<float> CachedBoneLengths;
183
185 TArray<FQuat> CachedOffsetRotations;
186};
ESplineBoneAxis
Definition AnimNode_SplineIK.h:16
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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 UMETA(...)
Definition ObjectMacros.h:747
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition Array.h:670
Definition AnimInstance.h:353
Definition Skeleton.h:295
Definition AlphaBlend.h:71
Definition AnimInstanceProxy.h:144
Definition AnimNode_SkeletalControlBase.h:22
Definition AnimNode_SplineIK.h:50
int32 GetNumControlPoints() const
Definition AnimNode_SplineIK.h:142
const FSplineCurves & GetSplineCurves() const
Definition AnimNode_SplineIK.h:118
const FSplineCurves & GetTransformedSplineCurves() const
Definition AnimNode_SplineIK.h:121
Definition BoneContainer.h:192
Definition BoneReference.h:14
Definition AnimNodeBase.h:600
Definition AnimNodeBase.h:642
Definition ReferenceSkeleton.h:100
Definition SplineComponent.h:76
Definition AnimNode_SplineIK.h:26
FSplineIKCachedBoneData(const FName &InBoneName, int32 InRefSkeletonIndex)
Definition AnimNode_SplineIK.h:34