I’m running a dedicated server and one client. From the client, I trigger an animation montage containing an anim notify state on my character to play on both the client and dedicated server. NotifyBegin and NotifyEnd are continually called only on the dedicated server instance for the duration of the montage.
The flow is as follows:
- UCharacterMovementComponent:ServerMovePackedis called on the server when processing network events. This leads to- UCharacterMovementComponent::MoveAutonomousbeing called followed by- UAnimInstance::TriggerAnimNotifieswhich triggers- NotifyBeginon the anim notify state.
- UCharacterMovementComponent::MoveAutonomousthen calls- UAnimInstance::ClearQueuedAnimEventswhich clears out the anim instance- NotifyQueue.
- USkeletalMeshComponent::FinalizeBoneTransformis called on the server during an animation update. This leads to- UAnimInstance::TriggerAnimNotifiescalling the- NotifyEnd()function of my anim notify state because- NotifyQueuewas cleared earlier from step 2.
My character isn’t even moving the entire time so I don’t understand why the server is processing the server move. Even if it were moving,NotifyBegin and NotifyEnd are still continually called on the server.
Is this always expected behavior on the server? Should I never be playing anim notify states on the server?
EDIT 1: Confirmed this is not an issue in UE 5.5.4. The notifies are played correctly, and UAnimInstance::ClearQueuedAnimEventsis not present in the code base. Will try to repro in a test project and submit a bug report.
EDIT 2: Already reported in Unreal Engine Issues and Bug Tracker (UE-308913)