I've successfully gotten custom animation nodes to work with the exception of AnimNode_SkeletalControlBase. I get linker errors all over the place, however I've implemented as many virtual functions as I could within the struct.
Everything else works fine. I've got AnimNode_Base derived classes working just fine and got a few blend nodes going.
Does anyone have any experience with this? Is there some module required by it that wasn't required by the other AnimNode types? I've also copied the AnimNode_ModifyBone class yet I still get these errors.
EDIT: I do have the proper module AnimGraphRuntime.
These are the linker errors:
Spoiler
The functions in question:
The only functions I can't override are 'Update_AnyThread()', 'EvaluateComponentSpace_AnyThread()', and 'EvaluateBoneTransforms' as the former two are final and the latter is deprecated.
Everything else works fine. I've got AnimNode_Base derived classes working just fine and got a few blend nodes going.
Does anyone have any experience with this? Is there some module required by it that wasn't required by the other AnimNode types? I've also copied the AnimNode_ModifyBone class yet I still get these errors.
EDIT: I do have the proper module AnimGraphRuntime.
These are the linker errors:
The functions in question:
Code:
// FAnimNode_Base interface virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override; virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override; virtual void Update_AnyThread(const FAnimationUpdateContext& Context) final; virtual void EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext& Output) final; // End of FAnimNode_Base interface protected: // Interface for derived skeletal controls to implement // use this function to update for skeletal control base virtual void UpdateInternal(const FAnimationUpdateContext& Context); // Update incoming component pose. virtual void UpdateComponentPose_AnyThread(const FAnimationUpdateContext& Context); // Evaluate incoming component pose. virtual void EvaluateComponentPose_AnyThread(FComponentSpacePoseContext& Output); // use this function to evaluate for skeletal control base virtual void EvaluateComponentSpaceInternal(FComponentSpacePoseContext& Context); DEPRECATED(4.16, "Please use EvaluateSkeletalControl_AnyThread.") virtual void EvaluateBoneTransforms(USkeletalMeshComponent* SkelComp, FCSPose<FCompactPose>& MeshBases, TArray<FBoneTransform>& OutBoneTransforms) {} // Evaluate the new component-space transforms for the affected bones. virtual void EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext& Output, TArray<FBoneTransform>& OutBoneTransforms); // return true if it is valid to Evaluate virtual bool IsValidToEvaluate(const USkeleton* Skeleton, const FBoneContainer& RequiredBones) { return false; } // initialize any bone references you have virtual void InitializeBoneReferences(const FBoneContainer& RequiredBones){}; /** Allow base to add info to the node debug output */ void AddDebugNodeData(FString& OutDebugData);
Comment