I have been attempting to apply root motion using C++ without using CharacterMovementComponent, and was able to get it working with a small amount of code. Here is the simplest way I know how to do it. I put this code inside of a Tick function.
FRootMotionMovementParams RootMotion = Mesh->ConsumeRootMotion();
if (RootMotion.bHasRootMotion)
{
FTransform WorldRootMotion = Mesh->ConvertLocalRootMotionToWorld(RootMotion.RootMotionTransform);
UpdatedComponent->SetWorldLocation(UpdatedComponent->GetComponentLocation() + WorldRootMotion.GetTranslation());
}
“Mesh” is a SkeletalMeshComponent that is animated using an Animation Montage with Root Motion enabled (simply using an animation asset does not work), and “UpdatedComponent” is a SceneComponent that I want the root motion applied to. For my case, I have a Box Collision (UpdatedComponent) with a Skeletal Mesh (Mesh) parented to it.
Note: I don’t believe this can be done in Blueprints without exposing the necessary functions.