Yeah, Unreal Engine has a built-in feature for physics-driven animation that lets you combine animations with physics. To enable this, first, set your character's skeletal mesh to use physics simulation.  Second create animations for your character's movement and actions as animation assets.  Third, use the Physics Asset Editor to set up physical constraints and collisions for their body parts.  Lastly, set up your character's blueprint to handle both physics simulation and animation blending. To avoid having to code for each character I would define a class of attacks. Here is an example. 

class UAttackAnim : public UObject
{
    GENERATED_BODY()

public:
    // Declare a function for a punch animation
    UFUNCTION(BlueprintCallable)
    void Punch(USkeletalMeshComponent* SkeletalMeshComponent);

    // Declare a function for a kick animation
    UFUNCTION(BlueprintCallable)
    void Kick(USkeletalMeshComponent* SkeletalMeshComponent);
};

void UAttackAnim::Punch(USkeletalMeshComponent* SkeletalMeshComponent)
{
    // Set up the physics simulation component
    UPhysicsHandleComponent* PhysicsHandleComponent = SkeletalMeshComponent->FindComponentByClass<UPhysicsHandleComponent>();
    if (!PhysicsHandleComponent)
    {
        PhysicsHandleComponent = NewObject<UPhysicsHandleComponent>(SkeletalMeshComponent, TEXT("PhysicsHandleComponent"));
        PhysicsHandleComponent->RegisterComponent();
    }

    // Set up the physics constraint component
    UPhysicsConstraintComponent* PhysicsConstraintComponent = SkeletalMeshComponent->FindComponentByClass<UPhysicsConstraintComponent>();
    if (!PhysicsConstraintComponent)
    {
        PhysicsConstraintComponent = NewObject<UPhysicsConstraintComponent>(SkeletalMeshComponent, TEXT("PhysicsConstraintComponent"));
        PhysicsConstraintComponent->SetupAttachment(SkeletalMeshComponent);
        PhysicsConstraintComponent->SetConstrainedComponents(SkeletalMeshComponent, NAME_None, PhysicsHandleComponent, NAME_None);
        PhysicsConstraintComponent->RegisterComponent();
    }

    // Set up the animation instance
    UAnimInstance* AnimInstance = SkeletalMeshComponent->GetAnimInstance();
    AnimInstance->SetRootMotionMode(ERootMotionMode::IgnoreRootMotion);

    // Enable physics simulation for the character
    SkeletalMeshComponent->SetSimulatePhysics(true);

    // Set the physics asset of the character
    UPhysicsAsset* PhysicsAsset = SkeletalMeshComponent->GetPhysicsAsset();
    SkeletalMeshComponent->SetPhysicsAsset(PhysicsAsset);

    // Set the physics blend weight of the character
    AnimInstance->SetPhysicsBlendWeight(1.0f);

    // Set up the physics handle component
    PhysicsHandleComponent->SetLinearDamping(0.5f);
    PhysicsHandleComponent->SetAngularDamping(0.5f);

    // Apply the punch impulse to the character's body
    FVector PunchImpulse = FVector(1000.0f, 0.0f, 0.0f); // Set the punch impulse vector
    SkeletalMeshComponent->AddImpulse(PunchImpulse, NAME_None, true); // Apply the punch impulse to the character's body
}
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence