Why does using the "play animation" node here work as intended, but using the "play montage" node with the same skeletal mesh reference and same animation (just converted directly into a montage) not do anything?

I am attempting to run an animation montage on a held weapon. When doing this with the “play animation” node, this works properly. The problem is that if the player switches items while the animation is playing, it will not be cut off as it would with a montage. For this reason, I want to use an animation montage, however, despite using the same mesh reference and same animation (just as a montage instead of an animation sequence) the animation no longer plays. I have used print strings on the completed and interrupted outputs and see them at the expected times based on the total duration of the animation (i.e. it’s not just being immediately skipped or interrupted) but nothing is happening visually. I am also positive the item has the correct skeleton mesh component reference based on the fact that it works on the “play animation” node. I keep seeing references to montage slots while trying to find solutions for this but I don’t really think that is applicable as the weapon itself has no animation graph. Any suggestions as to what may be preventing this from running would be greatly appreciated.

Your weapon’s lack of AnimBP is the issue–in order to use ‘Play Montage’, your actor needs a ‘Slot’ node through which to play the montage, even when the actor is a weapon.

This makes sense but I am confused as to what I would actually plug into the “default slot” node. I don’t have any animations associated with the weapon itself; they are all played from the characters animation blueprint. The weapon really only needs to play the singular montage and does not need to layer anything over other animations, just play the base animation. Is there a better way to do this then that does not require montages as that would seem like an overcomplication.

Try creating a single-frame animation seq for weapon skele called static_pose or some such, drag that into anim graph of weapon abp, and plug it into a slot node, and plug slot node into final pose output.

Or just use the basic play animation node to play the reload seq.

Unlike the rest of the engine’s graphs, the ‘AnimGraph’ runs from right to left–effectively, pulling execution rather than pushing it. So, the bare minimum you would need is a ‘DefaultSlot’ and ‘Output Pose’, as a weapon wouldn’t typically have more than one pose state. Then just call the ‘Play Montage’ in the appropriate BP.

If, however, you wish to maintain continuity, as @illspiritx mentioned, you can add any “idle” weapon ‘Animation Sequence’ (or make one from a single second static pose of an available animation) to close in the open pin.

I did some testing this evening with the and have come to an unexpected conclusion. It seems that I can actually run the animation montages without an animation blueprint for the weapon (I tried the above suggestions but was not getting different results with or without it even when the slot was added), but that I have to use the “play animation node” a singular time on the given weapon armature in order for it to work. I have been able to replicate this using debug keys in which I have one to use the play montage node, another to swap the item mesh, and a third to use the play animation node. In the absence of the play animation node, the montages will not play at all, however, once I use this node, they play normally until the skeletal mesh is changed after which they will no longer play until the play animation node is used again. All of this is being done without including the animation blueprint. This is easy to make work since I can just run a 1 frame animation when any item is equipped but I am wondering why this is the case. I can’t find anything like this issue online.

‘Play Animation’ plays directly on a ‘Skeletal Mesh Component’, bypassing the AnimBP or AnimInstance, which seems to be what you want but this comes with fewer control. A simple AnimBP is the standard method, but you can use animation notifies to reclaim some of that control:

Unreal Engine 5 Tutorial - Animation Notifies