CurveSource
Applies a programmatic source for curves
UAnimGraphNode_CurveSource
FAnimNode_CurveSource
Applies a curve to the animation based on a class implementing ICurveSourceInterface
.
The interface provides the following methods to be implemented:
- GetBindingName: Returns the name the node will match against its internal binding name to determine if the implementing actor or component represents a valid curve source.
- GetCurveValue: Does Nothing as far as I can tell. Theoretically should return a value for a named curve, but is not called from the node or anywhere else in the engine as of UE5.3.
- GetCurves: Returns an array of named values that will be used by the node to set the values of the curves by name.
This interface is also only implemented once in the engine: in the AudioCurveSourceComponent
.
The node only has one configurable variable: SourceBinding
, which will be used to find the source from which to query the curve data.
Who can implement the interface?
The nodes tooltip may tell you it will search the owning actor of the AnimBP this node is running on first, and then any components on the actor for whether they implement the CurveSourceInterface. And this is even true. But there is a catch: It only works if the interface exists in a C++ baseclass!
The methods of the interface can be implemented in a derived Blueprint, but the interface itself on the class needs to be from C++. Nonetheless it is implementable from BP, the node will just not recognize it.
This is because in FAnimNode_CurveSource::PreUpdate()
there is a line that goes PotentialCurveSource = Cast<ICurveSourceInterface>(InObject);
, but this only works correctly on an object of a native class. Casting any Blueprint class to an interface in C++ will always result in a nullpointer, so the node never even finds a viable curvesource.