What I mean is :
Baseball bat swing is an animation. It makes your character look like it swings the bat in front of him. Bat will not be real object, will have no body, no collision shape - it will only be mesh and animation.
Your character will have an Area called ParryBox as a child. It will be positioned in some small distance in front of your character. Its collision shape will be a box. Box max extents will reach something like Vector3(10,15,1) - so its Z axis is very thin.
ParryBox masks colliisons only with projectiles
Parrybox code is : on body entered -> reverse this body velocity/ or trigger this body parried function.
When no button is pressed ParryBox will remain disabled or its sollision shape shrinked to 0.
Pressing the button will trigger bat swing animation as well as enabling ParryBox/ enlarging it to max extents. After short time ( or on animation ended/ on animation progressed) ParryBox shrinks/disables again.
This will basically create a thin wall for a very short time that will catch projectiles if clicking the button is correctly timed. It will also require good basic state_machine for your character, to not allow him to endlessly click parry or hold it down.