Hi,
I’m working with the Motion Matching system in Unreal Engine 5, and I’ve run into a consistent issue when transitioning from non-moving montages back to idle.
Each montage (such as weapon equip/unequip) is followed by a unique idle pose specific to that montage. These idle poses are stored in separate PoseSearch Databases, and I switch the active DB accordingly when the montage ends.
However, since there’s little to no trajectory change after the montage finishes, Motion Matching often keeps the previous idle pose instead of transitioning to the new one.
In fact, if I slightly move the character after the montage ends, only then does the system transition into the correct new idle pose — which confirms that the DB switching logic itself is working.
My question is:
How should I structure the system so that Motion Matching reliably transitions into the intended idle pose right after the montage ends, even if the character doesn’t move?
I’m looking for a recommended approach or best practice to ensure the pose actually updates, and doesn’t stick with the previous one due to insufficient feature difference.
Thanks in advance!
Hi, likely the best approach here is to use the Interrupt Mode property when you set the database that is currently being used. You can use Interrupt On Database Change or Interrupt On Database Change and Invalidate Continuing Pose:
[Image Removed]When that property is set, it invalidates the continuing pose, which should mean that the pose search will switch to a pose from the new database on the frame that you switch to the idle database. I wrote a little bit about the interrupt mode in the getting started guide on EDC.
Another option here is dependent on the structure of your animation graph. If you have your Motion Matching animation node in a state, or branch within the anim graph, that becomes inactive when your Montage plays, the continuing pose should be reset when the Motion Matching node then becomes active again when the Montage ends. This assumes that Reset On Become Relevant is set on the node:
[Image Removed]
Thank you again for the detailed explanation.
I’ve applied the suggested Interrupt Mode = On Database Change and Invalidate Continuing Pose,
and ensured that the Motion Matching node resets correctly using Reset on Become Relevant.
Functionally, this setup works — the correct idle pose from the new database is eventually selected as expected.
However, I’m still seeing a visual issue:
Right after the montage ends, the previous idle pose briefly appears on screen before the new pose takes effect.
This is especially noticeable when the character is standing still, and it looks as if the old pose is rendered for a moment before the transition happens.
So my follow-up question is:
Is there a reliable way to force the new pose to be selected and applied immediately when the montage ends — so that this brief appearance of the previous pose doesn’t occur?
For example, do you recommend using a custom AnimNotify at the end of the montage to explicitly reset the Motion Matching state or invalidate the continuing pose?
Or internally at Epic, is there another approach to eliminate this kind of visual “pose carryover” when transitioning back to idle?
The current setup is working quite well overall — I’m just trying to smooth out this final transition artifact.
Really appreciate all the help and guidance you’ve provided so far — it’s been invaluable.
Thanks again!
[Image Removed]
Hi, sorry for the delay getting back to you on this - I’ve been out of office since it’s been the Epic summer break for the last couple of weeks.
I would be suspicious that the database hasn’t actually switched before the montage ends. Since you now have the interrupt mode set to invalidate the continuing pose, the pose generated by the motion matching node should only be taken from the frames of data in the currently active database. Can you debug the Chooser evaluation to see when the database that is being output changes? (You can do this by opening the Chooser table while rewind debugger is active and selecting the debugged instance.)
You can also look at the Pose Search section of the rewind debugger information to see which database is active, and which pose was selected from within the database. In the following screenshot, you can see an example of transitioning from a starting database to a steady state locomotion database. You can see how on the last frame that the starting database was active how the continuing pose is coming from the starting database whereas the actual active pose has come from the steady state database:
[Image Removed]It would be useful to look at the equivalent row in your rewind debugger recording to see which pose is being selected when the montage ends and which database it’s coming from.
Thanks, ok, I’ll close out this thread in that case. But you should still be able to reopen it for the next few weeks if you get a chance to look over it. Otherwise, feel free to just start a new thread and link to this one.
Thank you, and I hope you had a great vacation.
I haven’t had a chance to test it yet due to other tasks,
but I’ll refer to your response when I’m able to check it later.
Thanks again!