Appearance
MotionJumpComponent
MotionJumpComponent manages jump intent, multi-jump, coyote time, jump buffering, landing feedback, and server-authoritative validation.
Requirements
- Character with standard
UCharacterMovementComponent - A resolvable
UAbilitySystemComponent, commonly exposed by a PlayerState that implementsIAbilitySystemInterface - Gameplay Ability System initialized
- Enhanced Input configured
- Wants-to-jump and jumping GameplayEffects
- GameplayTags for jump intent, active jumping, and jump availability
For setup and input binding steps, see How to add Motion to a character.
Behavior
The component stores jump input, checks whether a jump can execute, applies direct jump velocity, manages coyote time and input buffering, resets jump count on landing, and broadcasts camera, sound, and Blueprint feedback.
Coyote time allows a jump shortly after leaving the ground. Jump buffering stores input shortly before landing and executes it when the character becomes valid for jumping.
API
Jump state
SetWantsToJump(bool bWantsToJump) -> void: sets jump intent.GetWantsToJump() -> bool: returns jump intent.IsCurrentlyJumping() -> bool: returns air/jump state.CanJump() -> bool: checks whether another jump can execute.TriggerJump(bool bIsAdditionalJump) -> bool: manually triggers a jump.CanPerformJump() -> bool: validates all jump conditions.PerformJump(bool bIsAdditionalJump) -> bool: executes the jump.GetRemainingJumps() -> int32: returns available additional jumps.HandleLanding() -> void: handles landing reset and feedback.
Timers and state management
UpdateCoyoteTime(float DeltaTime) -> void: updates coyote time.UpdateJumpBuffer(float DeltaTime) -> void: updates buffered input.IsInCoyoteTime() -> bool: checks whether coyote time is active.IsJumpBuffered() -> bool: checks whether input is buffered.UpdateJumpingState(float DeltaTime) -> void: updates jump state.InitializeJumpComponent() -> void: initializes cached references.OnAbilitySystemComponentReady() -> void: performs GAS setup.GrantJumpAbilityTag() -> void: grants the jump ability tag.
Velocity, camera, and input
ApplyDirectJumpVelocity(bool bIsAdditionalJump) -> void: applies direct jump velocity.StartJumpCameraEffects() -> void: starts jump camera feedback.StopJumpCameraEffects() -> void: stops jump camera feedback.StartLandingCameraEffects() -> void: starts landing camera feedback.StopLandingCameraEffects() -> void: stops landing camera feedback.StartCameraShake(const FMotionCurve&, int32&) -> void: starts a reusable camera effect.StopCameraShake(const FMotionCurve&, int32&) -> void: stops a reusable camera effect.OnInputStarted(FInputActionValue&) -> void: handles jump input press.OnInputCompleted(FInputActionValue&) -> void: handles jump input release.HandleJumpInputStateChange(bool bPressed) -> void: processes jump input state.BindJumpInput(UInputAction*) -> bool: binds jump input through auto-discovery.BindJumpInputWithComponent(UInputAction*, UEnhancedInputComponent*) -> bool: binds jump input through an explicit input component.
Networking
ServerRequestJump(bool bWantsToJump) -> void: server RPC for jump validation.MulticastJumpFeedback(bool bJumped, int32 JumpNumber) -> void: multicasts jump feedback.MulticastLandingFeedback() -> void: multicasts landing feedback.
Configuration
Configuration lives on the assigned MotionJumpProfile. The current Motion default is /MotionCore/Motion/Profiles/v2_0_0/DA_MotionJumpProfile_Default_v2_0_0.
Jump settings
JumpVelocityMultiplier: jump velocity multiplier. Default:1.0.JumpVelocityModifier: absolute jump velocity added. Default:0.0.bEnableMultiJump: whether multi-jump is enabled. Default:false.MaxAdditionalJumps: number of additional airborne jumps. Default:1.AdditionalJumpVelocityMultiplier: velocity multiplier for additional jumps. Default:0.8.
Responsiveness settings
CoyoteTime: grace period after leaving ground. Default:0.15.JumpBufferTime: time to keep jump input buffered. Default:0.2.
Effects and feedback
JumpCameraShake: camera curve during jump.LandingCameraShake: camera curve when landing.bApplyCameraShake: whether camera shake is applied.bAutoTriggerLandingSound: whether landing sounds are triggered automatically.WantsToJumpTagEffect: grants wants-to-jump tag.JumpingTagEffect: grants jumping state tag.
The component's editable setup surface is the Profile reference. Input buffers, coyote timers, jump counts, camera curve playback identifiers, and replicated state remain component-owned.
Read-Only State
JumpCameraShakeIdentifier: identifier for jump camera shake.LandingCameraShakeIdentifier: identifier for landing camera shake.CachedMovementSoundComponent: cached sound component reference.MotionJumpCount: replicated jump counter.LastGroundedTime: time the character last left ground.LastJumpInputTime: time jump input was last pressed.OriginalJumpZVelocity: jump Z velocity cached at BeginPlay.bWasGroundedLastFrame: previous grounded state.bWasJumpingLastFrame: previous jumping state.bActuallyJumped: tracks whether the component performed a jump.bUsedCoyoteJump: tracks whether coyote jump was used.bJumpButtonReleasedSinceLastAirJump: prevents held-button multi-jump.bJumpInputTriggeredThisFrame: frame-level input flag.LastJumpRPCTime: server-side RPC rate limit timestamp.bCoyoteExpiredLastFrame: coyote expiration event guard.bBufferExpiredLastFrame: buffer expiration event guard.
Blueprint Events
OnJumpStateChanged(bool bIsJumping): fires when jump state changes.OnJumpPerformed(bool bIsAdditionalJump, int32 JumpNumber): fires when a jump executes.OnLanded(): fires when the character lands.OnCoyoteTimeExpired(): fires when coyote time expires.OnJumpBufferExpired(): fires when buffered input expires.
Networking
Jumping uses server RPC validation, multicast feedback, local prediction, and authority-based reconciliation.