Important
Play Montage Pro (PMP)
Reliable Gameplay Notify System
Multi-Mesh/Montage Support
Additional Blending Parameters
And its FREE!
Tip
Suitable for both singleplayer and multiplayer games
Supports UE5.4+
Caution
PMP is currently in beta
There are many non-standard setups that have not been fully tested
Caution
Did you know? Anim Notifies are not guaranteed to trigger 😕
Note
Have you heard the common phrase "Animation should not affect gameplay"?
But you've probably already built notifies that reload your weapon - and more - without experiencing issues 🥸
Its a trap that catches you later in production: The heavier your game gets, the less likely Anim Notifies are to fire 😵
This is true for Queued notifies. The alternative is Branching Point notifies
However, when two or more Branching Point notifies trigger on the same frame, only one will trigger! 💀
What if you had a notify that changes the movement mode away from Flying? You can get stuck in Flying! 👾
There is no anim notify system in Unreal that ensures your notifies will fire reliably. PMP is the solution to this. 💥
Tip
At it's core PMP uses timers to trigger notifies when you play a montage or change montage sections
Timers are reliable! 🚀
When your notifies need to affect gameplay reliably, use PMP.
Otherwise, use the existing notify system.
- ProNotifySystem
- Gameplay Timers triggering notifies reliably
- Trigger notifies placed prior to the anim start time
- Ensure notifies trigger on anim end, even if they were not reached
- Multi-mesh support with Driver, Replicated Driven, and Local Driven Montages (
gas-probranch only)- Driven Montages optionally match the duration of the Driver montage
- Example use-case: TP character mesh Reloads (Driver), so their TP weapon plays a matching replicated driven montage (replicated so simulated proxies play the montage), FP character mesh and weapon both play their own Local Driven Montages (not replicated)
- Additional Blend in and out parameters (
gas-probranch only)
Tip
ProNotifySystem is timer-based and does not run through the animation system
This makes it reliable, but it works differently, and may produce different results.
- Anim Notify States supported Start and End - But not Tick
- Only supports notifies on Montages not their AnimSequences
- Trigger Settings such as
NotifyTriggerChancewill not do anything- You can optionally override
ShouldTriggerNotify()in C++ to implement this behaviour yourself
- You can optionally override
- SimulatedProxies typically don't get calls to play montages thus cannot operate on timers and don't support Pro Notifies as a result
- SimulatedProxies as well as Editor can optionally use the engine's notify system instead
FAnimNotifyEventReferencedoes not exist for notify callbacksCustomTimeDilationis a per-actor Time Dilation, however there are no callbacks or even setter for this property- ProNotifySystem relies on
USkinnedMeshComponent::OnTickPoseto detect changes. If your dedicated server doesn't tick the mesh pose it will not work. - There is likely a performance overhead with enabling this
- ProNotifySystem relies on
- ProNotifySystem is very different to Epic's implementation
- Triggering behaviour may not always be identical - but you can report this if you believe it is a bug
- Use this for gameplay critical systems only, and use Epic's for cosmetics
- Because SimulatedProxies and Editor run on Epic's system, results may not be consistent
There are 3 branches available. The precompiled binaries are for gas-pro branch only as it contains all the features.
mainPlayMontagePro()only, no GAS dependency, supports Pro Notify System onlygasPlayMontageProAndWait()with support for gameplay abilities, supports Pro Notify System onlygas-pro:PlayMontageProAdvancedAndWait(), with support for multiple driven meshes and gameplay events and additional blend parameters
Code was used from GASShooter for multi-mesh/montage support and events
- Switch to pale yellow notify color to differientate
- Stop checking
ShouldBroadcastAbilityTaskDelegates()forEnsureBroadcastNotifyEvents()- Causing unintended behaviour and these notifies already track their broadcast states themselves
- Fixes a bug with ending montage due to ability end in particular.
- Add
EnsureBroadcastNotifyEvents()toOnDestroy() EnsureBroadcastNotifyEvents()fromOnMontageBlendingOut()no longer inappropriately ensures end states for notify states- Re-order
UPlayMontageProCallbackProxybroadcast/ensure for consistency with other nodes
- Initial Release