The issue seems to have a few parts.
First, active events don't persist between frames. Instead, a new active list is created each frame and diffed against the previous frame. Added events have Begin called, removed events have End called, and events that didn't change have Tick called.
Second, there is special case code (both in UBlendSpaceBase::TickAssetPlayer, UAnimSequenceBase::GetAnimNotifies, and potentially elsewhere) that will prevent notifications from being added to the current active list when DeltaTime is 0. Animation DeltaTime is computed as ActualDeltaTime * GlobalAnimRateScale, meaning when GlobalAnimRateScale is 0, these cases are hit.
Download, extract, and open the attached project.
Play the level.
Pressing P will set GlobalAnimRateScale to 0.
Releasing P will set GlobalAnimRateScale to 1.
Expected: When P is pressed the animation pauses, and when P is released the animation resumes. No notifies are triggered.
Actual: When P is pressed the animation pauses and NotifyEnd is triggered. When P is released the animation resumes and NotifyBegin is triggered.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-36437 in the post.
4 |
Component | OLD - Anim |
---|---|
Affects Versions | 4.12, 4.14 |
Target Fix | 4.19 |
Created | Sep 26, 2016 |
---|---|
Resolved | Nov 21, 2017 |
Updated | May 18, 2020 |