Dear community! For a few days i can’t figur out how to set transform of the bone in world space using FPoseContext in anim node.
void FAnimNode_SetBonesTransforms::Evaluate(FPoseContext& Output)
{
BasePose.Evaluate(Output);
if (BonesTransfroms.Names.Num() > 0 && BonesTransfroms.Transforms.Num() > 0)
{
USkeletalMeshComponent* SkeletalMesh = Output.AnimInstanceProxy->GetSkelMeshComponent();
for (int32 i = 0; i < BonesTransfroms.Names.Num(); i++)
{
int32 BoneIndex = SkeletalMesh->GetBoneIndex(BonesTransfroms.Names[i]);
if (BoneIndex != INDEX_NONE)
{
const FCompactPoseBoneIndex CompactBoneIndex = FCompactPoseBoneIndex(BoneIndex);
FTransform LocalTransform = BonesTransfroms.Transforms[i];
Output.Pose[CompactBoneIndex].BlendWith(LocalTransform, BlendWeight);
}
}
}
}
The problem is that my array of transforms BonesTransfroms.Transforms is in world space. But Output.Pose transforms are in bone space.
I tried different methods but nothing worked. Thank you very much!