Playing Multiple Montages simultaneous with different SlotGroups not working

Hello!

I’m experimenting with different ways of setting up the Animation Blueprint for my characters. Coming from UE3, I was used to having “AnimNodeBlendPerBone” and faux sequences hooked up, which I would later replace and play from UnrealScript.

Playing with UE5 I’ve discovered that “Slots” can replace the situation where you have one-shot animations.

Consider the following:

Slot “TopHalf” blends in on the bone “bone_Spine01” where “Taunt” blends in on “bone_Root”.

I’ve read that if you put both slots in a different group, you can use the “Play Slot Animation” on both and they will play simultaneously.

However, if I play a taunt-animation on the Taunt-slot and then activate a reload-animation on the TopHalf-slot, the reload-animation will replace the taun-animation that was playing. This is not what I expect, given the TopHalf slot is higher up in the Pose-chain, and should get overwritten if a Taunt is playing.

Could anyone shed some light on why this is happing? What am I missing?

Wow, I actually figured this out. I would maybe consider this a bug/oversight.

My animations and skeletons work together using Compatible Skeletons. However, whenever the Play Montage node is trying to play the asset, it only considers the Skeleton that is directly attached to the selected animation. That skeleton doesn’t have the slots nor the slotgroups they are in, so the “GetGroupName” function will always return the “Default”-group. Combine that with a “bStopAllMontages” always set to true, and you get exactly what I described above.

I currently “fixed it” by making my own version of the Play Montage by setting “bStopAllMontages” to false. It’s not a great solution, but it works. The way to fix this is two-fold:

  1. UAnimMontage::CreateSlotAnimationAsDynamicMontage should (optionally) ask for an Anim Instance, so it can use that Skeleton instead.
  2. UAnimMontage::GetGroupName should respect compatible skeletons.
1 Like