Hey, Emidee code no longer compiles, it is ported to 4.26:
FTransform UGGUtilitiesFunctionLibrary::GetBoneTransformFromMontage(const USkeletalMeshComponent* MeshComponent, const UAnimMontage* anim_montage, FName target_bone_name, float Time)
{
UAnimSequence* AnimSequence = Cast<UAnimSequence>(anim_montage->SlotAnimTracks[0].AnimTrack.AnimSegments[0].AnimReference);
FTransform Transform = GetBoneTransformFromSequence(MeshComponent, AnimSequence, target_bone_name, Time);
return Transform;
}
FTransform UGGUtilitiesFunctionLibrary::GetBoneTransformFromSequence(const USkeletalMeshComponent* MeshComponent, const UAnimSequence* anim_sequence, FName target_bone_name, float Time)
{
if (!anim_sequence || !MeshComponent || !MeshComponent->SkeletalMesh)
return FTransform::Identity;
FName bone_name = target_bone_name;
FTransform global_transform = FTransform::Identity;
do
{
const int bone_index = MeshComponent->GetBoneIndex(bone_name);
int32 BoneTrackIndex = MeshComponent->SkeletalMesh->Skeleton->GetRawAnimationTrackIndex(bone_index, anim_sequence);
FTransform bone_transform;
anim_sequence->GetBoneTransform(bone_transform, BoneTrackIndex, Time, true);
global_transform *= bone_transform;
bone_name = MeshComponent->GetParentBone(bone_name);
} while (bone_name != NAME_None);
global_transform *= MeshComponent->GetComponentTransform();
return global_transform;
}