Hello,
I am currently using the GAS Sandbox Mover pawn (MoverComponent / UMoverComponent) instead of CharacterMovementComponent.
I am trying to play a specific animation montage (for example: knockdown → lying → get-up).
During this montage, the character must be completely immobilized.
What I have already done:
I block player input in InputProducerㅅ → ProduceInput() by zeroing the movement input values.
This successfully stops keyboard movement input.
However, the character still continues to slide due to existing velocity/inertia from previous movement or knockback.
ㆍI then tried:
This only stops the character for a single frame, and on the next tick the pawn begins moving again.
It looks like something inside the Mover simulation (movement mode / layered move / external forces) is continuously re-applying velocity.
What I want:
While a montage is playing, I need behavior similar to CharacterMovementComponent → StopMovementImmediately() + DisableMovement, meaning:
• No input movement
• No residual velocity
• No sliding
• Character remains fixed in place until the montage ends
So my questions:
What is the correct way to completely freeze a Mover pawn during a montage?
Do I need to cancel layered moves/modifiers?
Is a custom movement mode required?
How should velocity be cleared in a persistent way (not just one tick)?
Any guidance or recommended pattern for GAS + Mover would be greatly appreciated.
bIgMOnKe10
(bIgMOnKe10)
February 18, 2026, 5:45am
2
Hi, one way to do it is using root motion in your animation montage. but I use a different method where I take the player velocity and apply a force in the opposite direction. but mover is still new so you should also experiment with it
Waiflih
(Waiflih)
February 24, 2026, 1:50am
3
From the Mover examples I got this:
I still don’t know how to call this in c++ so for now i’m using a BlueprintNativeEvent to call it
Waiflih
(Waiflih)
February 24, 2026, 4:20am
4
This is in c++ :
#include "Mover/Public/DefaultMovementSet/LayeredMoves/BasicLayeredMoves.h"
#include "Mover/Public/DefaultMovementSet/InstantMovementEffects/BasicInstantMovementEffects.h"
void AMyActor::AddImpulse(FVector Impulse, bool OverrideVelocity)
{
FApplyVelocityEffect Movement;
Movement.VelocityToApply = Impulse;
Movement.bAdditiveVelocity = !OverrideVelocity;
Movement.ForceMovementMode=TEXT("Falling");
GetMoverComponent()->QueueInstantMovementEffect(MakeShared<FApplyVelocityEffect>(Movement));
}
void AMyActor::StopMovement()
{
FLayeredMove_LinearVelocity Movement;
Movement.Velocity = FVector(0);
Movement.MixMode=EMoveMixMode::OverrideVelocity;
Movement.DurationMs=0;
Movement.FinishVelocitySettings.SetVelocity=FVector(0);
Movement.FinishVelocitySettings.FinishVelocityMode=ELayeredMoveFinishVelocityMode::SetVelocity;
GetMoverComponent()->QueueLayeredMove(MakeShared<FLayeredMove_LinearVelocity>(Movement));
}
You have to do two things , 1 set a new stance named death or whatever you want and 2nd add a new gait and in BP_MovementModeWalking set this new gate values to zero and on death or knock change stance to death and gait to death